18. C++ Рекурсия

Рекурсия

С++ позволяет определять рекурсивные функции, т.е. функции которые вызывают сами себя напрямую или опосредованно.
Например, следующая функция вычисляет факториал:

int factorial(int n)
{
if (n == 0)  return 1;
return factorial(n — 1) * n;
}

Посмотрим на графике, что в этом случае произойдет:

допустим мы хотим посчитать факториал числа 3
factorial(3);

Все будет согласно данной картинке:
Факториал от 3 вызовет факториал от 2,
факториал от 2 вызовет факториал от 1,
факториал от 1 вызовет факториал от 0,
факториал от 0 вернет 1, которая подставится в return factorial (0)*1 ; //= 1*1=1 это значение factorial(1)

Посчитанное значение подставится в return factorial (1)*2; //=1*2 =2 это значение factorial(2)
Посчитанное значение подставится в return factorial (2)*3; //=2*3=6 это значение factorial(3)

Итог: факториал числа 3=6
Проверим 3!=3*2*1=6

Плюсы рекурсии:

  • некоторые функции невозможно решить без рекурсии
  • необязательно знать заранее число итераций

Минусы рекурсии:

  • сложно прогнозировать требуемый объем памяти
  • зачастую сложность понимания принципа ее работы и условия выхода.

 

Примечания:
Все рекурсивно вызываемые функции как правило располагаются друг за другом в памяти
ВСЕГДА нужно предусматривать условие выхода из рекурсии, иначе она будет бесконечной!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *