Рекурсивные ф-ии - ф-ии, вызывающие сами себя. Старайтесь вообще никогда не использовать рекурсивные функции, т.к. рекурсия сильно замедляет работу программы. И вообще вызов любой(не встраиваемой) функции замедляет работу.
Как правило, в начале такой функции пишется условие выхода из рекурсии. Например, ф-ия факторила
Код:
int fuck(int n)
{
if (n == 0) //Условие выхода из рекурсии
return 1;
return n*fuck(n - 1);
}
В то же время эту ф-ию можно(и нужно) переписать без рекурсии.
Код:
int fact(int n)
{
if(n == 0)
return 1;
int temp = 1;
for(int i = 1; i <= n; i++)
{
temp = temp*i;
}
return temp;
}
Кроме того, глубина рекурсии конечна, то есть следующая программа не будет работать сколь угодно долго, а очень даже быстро прекратит работу
Код:
void stack_overload()
{
cout<<"-";
return stack_overload();
}
Алгоритмы на бинарных деревьях(поиска) в большинстве являются рекурсивными, однако любой из них можно переписать без рекурсии(просто не рекурсивные функции выглядят некрасиво и запутанно).
Например, алгоритм обхода ЛКП:
Код:
void CTree<T>::Walk(CTree<T>* item)
{
if (!item) return;
Walk(item->Left); //идём влево
cout << item->value <<" "; //обратно в корень
Walk(item->Right); //идём вправо
}