Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2011, 17:55   #1
Ev1L
Пользователь
 
Регистрация: 25.11.2010
Сообщений: 39
Плохо Рекурсия

Добрый вечер форумчане. Вот такая проблема не могу понять как действуют рекурсивные функции.
к примеру эта:
Код:
int f1(int a)
{
	int summ;
	if(a <= 1)
		return 1;
	summ = a*f1(a-1);
	return summ;
}
Если, не трудно помогите понять принцип действия рекурсивных функций и данной функции в частности.
Ev1L вне форума Ответить с цитированием
Старый 08.01.2011, 18:08   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рекурсия, это если функция вызывает саму себя.
В твоем случае вызывается функция f1 с параметром. Если он более 1 то формируется новый параметр, и опять вызывается эта же функция, но уже с новым параметром. Получается матрешка - в каждой последующей функции есть такая же функция но с другим параметром. Когда в последней вложенной функции-матрешке сработает условие, она перестанет вызывать себя, и завершится. Это приведет к завершению предидущих функций-родителей, поскольку после выхова нет операторов кроме return summ, вот эта строчка и будет скопом закрывать выполнение всех функций, одну за другой от самой мелкой матрешки до самой большой, возвращая в матрешку побольше результат.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.01.2011, 18:25   #3
Ev1L
Пользователь
 
Регистрация: 25.11.2010
Сообщений: 39
По умолчанию

к примеру я передаю функции значение 4;
то при первом вызове функция получает значение 4; далее 3;потом 2, 1.
матрешка начинает складываться: 2*1, возвращается значение, потом 3*2 итд.
тоесть функция вызывает саму себя пока не будет нарушено какое то определенное условие, каждый раз создается новая копия функции принимающая новый аргумент.
все верно?

Stilet большое спасибо.

Последний раз редактировалось Ev1L; 08.01.2011 в 18:27.
Ev1L вне форума Ответить с цитированием
Старый 08.01.2011, 18:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
каждый раз создается новая копия функции принимающая новый аргумент.
Ну копия конечно не создается, но если тебе так легче будет понять то да, можно сказать что "абстрактная копия функции с новым параметром"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия gafruslan Помощь студентам 1 21.12.2010 17:43
Рекурсия Alexsey1991 Помощь студентам 1 12.05.2010 10:24
Рекурсия))) NewMen Паскаль, Turbo Pascal, PascalABC.NET 2 02.05.2010 14:24
Рекурсия на С++ Nitriyc Помощь студентам 0 28.04.2010 17:22
Рекурсия Jasper92 Помощь студентам 1 27.04.2010 16:58