Рекурсии или итерации?
Изучив предыдущий раздел урока – вы наверняка задались вопросом: а зачем
нужна рекурсия? Ведь, реализовать вычисление факториала можно и с помощью
итераций и это совсем не сложно:
#include <iostream>
using namespace std;
long int Fact2(long int N)
{
long int F = 1;
//цикл осуществляет подсчет факториала
for (long int i=2; i<=N; i++)
F *= i;
return F;
}
void main()
{
long number=5;
long result=Fact2(number);
cout<<"Result "<<number<<"! is - "<<result<<"\n";
}
|
Такой алгоритм, наверное, будет более естественным для программистов. На
самом деле, это не совсем так. С точки зрения теории, любой алгоритм, который
можно реализовать рекурсивно, совершенно спокойно реализуется итеративно. Мы
только что в этом убедились.
Однако это не совсем так. Рекурсия производит вычисления гораздо медленнее,
чем итерация. Кроме того, рекурсия потребляет намного больше оперативной памяти
в момент своей работы.
Значит ли это, что рекурсия бесполезна? Ни в коем случае!!! Существует ряд
задач, для которых рекурсивное решение тонко и красиво, а итеративное – сложно,
громоздко и неестественно. Ваша задача, в данном случае – научиться, не только
оперировать рекурсией и итерацией, но и интуитивно выбирать, какой из подходов
применять в конкретном случае. От себя можем сказать, что лучшее применение
рекурсии – это решение задач, для которых свойственна следующая черта: решение
задачи сводится к решению таких же задач, но меньшей размерности и,
следовательно, гораздо легче разрешаемых.
Удачи Вам на данном поприще!!! Как говорится: «Что бы понять рекурсию, надо
просто понять рекурсию».