Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 07.pptx
Скачиваний:
68
Добавлен:
21.05.2015
Размер:
261.93 Кб
Скачать

Если рекурсивная функция factr() вызывается с аргументом, равным 1, то сразу возвращает значение 1. В противном случае она возвращает произведение factr(n-

1) * n.

Для вычисления этого выражения вызывается метод factr() с аргументом n-1.

Этот процесс повторяется до тех пор, пока аргумент не станет

Когда функция вызывает сама себя, в системном стеке выделяется память для новых локальных переменных и параметров, и код функции с самого начала выполняется с этими новыми переменными.

Рекурсивный вызов не создает новой копии функции.

Новыми являются только

При возвращении каждого рекурсивного вызова из стека извлекаются старые локальные переменные и параметры, и выполнение функции возобновляется с "внутренней" точки ее вызова. О рекурсивных функциях можно сказать, что они "выдвигаются" и "задвигаются".

Слишком большое количество рекурсивных обращений к функции может вызвать переполнение стека. Поскольку локальные переменные и параметры сохраняются в системном стеке и каждый новый вызов создает новую копию этих переменных, может настать момент, когда память стека будет исчерпана.

В этом случае могут быть

При написании рекурсивной функции необходимо включить в нее инструкцию проверки условия (например, if-инструкцию), которая бы обеспечивала выход из функции без выполнения рекурсивного вызова.

Если этого не сделать, то, вызвав однажды такую функцию, из нее уже нельзя будет вернуться. При работе с рекурсией это самый

// Отображение строки в обратном порядке с помощью рекурсии.

#include <iostream> using namespace std; void reverse(char *s); int main()

{

char str[] = "Это тест";

reverse(str);

return 0;

}

// Вывод строки в обратном порядке. void reverse(char *s)

{

if(*s)reverse(s+1);

else return;

cout << *s;

}

Соседние файлы в папке lekcii_1_10