Рекурсия
     Рекурсивен се нарича такъв обект, които изцяло или частично се определя чрез себе си. В езика за програмиране с++ е разрешено функция да извиква сама себе си .
         Функция, която при своето изпълнение се активира пряко или косвено се нарича рекуривна .
    - Пряко активиране - функция, която има оператор за активиране в същата функция.
    - Косвено активиране - функция, която се активира при изпълнение на друга функция, включена в тялото на първата функция - в този случай двете функции се наричат взаимно рекурсивни.
Най-често използваното определение за рекурсивна функция е :
         функция, която извиква сама себе си.
Рекурсивната функция трябва да има на условния израз, който да се проверява за да се избегне блокирането на програмата.
Действие :
    Когато основната функция (main()) извика рекурсивната функция (в пример 1: recurse())действието на прогамата се пренасочва от началото на функцията ( recurse() ).
Проверява се условния израз и съответно, ако условието не е изпълнено (В тялото на функцията съществува ред в който се извиква същата функция (recurse()). Програмата прекъсва своето изпълнение и отново извиква рекурсивната функция ( аргумента във функцията съответно се променя). Отново се проверява условния израз ако условието не е изпълнено. Програмата прекъсва своето изпълнение и отново извиква рекурсивната функция и т.н.
    Изпълнението на рекурсията прилича на поредица от вложени цикли като се изпълнява първо най-вътрешния цикъл или последното извикване на рекурсивната функция със съответния й аргумент.
След като условието вече не се изпълнява, прогармата подновява своето изпълнение от там , където е прекъснала ( в пример 1 това е редът cout<< i<< ","; и започва да извежда числата.)По този начин в следващия пример числата се отпечатват от 10 към 1,а не от 1 до 10, въпреки това, че началната стойност на recurse(1); е 1 (единица).


Пример 1 : Отпечатване на числата 10,9,8 .. до 1 . След като
използваме рекурсивната функция recurse ().

#include <iostream> //for Code Blocks
using namespace std;
void recurse (int i)
{
    if(i<11)
       {
       recurse(i+1);
       cout<< i<< ",";
      }
}
int main()
{
recurse(1);
return 0;
}

Пример 2 : Изчисляване на факториел чрез рекурсивна функция.
Факториел на числото 5 е равно 5!=5*4*3*2*1=120, на 3!=3*2*1=6 .
Програмата извежда n= , ако въведем 4 програмата ще изведе 4!=24

#include <iostream> //for Code Blocks
using namespace std;
long long int recurse (int i)
{
    if(i>1)
    return (i* recurse(i-1));
   else
return 1;
}
int main()
{
   int n;
   cout<< "n=";
   cin>> n;
    cout<< n<< "!="<< recurse(n);
   return 0;
}

Пример 3 : Извеждане редицата на Фибоначи на екрана.
Редицата на Фибоначи е : 0,1,1,2,3,5,8,13,21 ..т.н.
Първите две числа са : 0 и 1, а следващите числа се получават, като
сбор от предхождащите ги две числа F(i)=F(i-1)+F(i-2)

#include <iostream> //for Code Blocks
using namespace std;
long long int recurse (int i)
{
if(i>2)
return (recurse(i-1) + recurse(i-2));
else
return 1;
}
int main()
{
int n;
cout<< "n=";
cin>> n;
cout<<"0,";
for(int i=1;i< n;i++)
cout<< recurse(i)<<",";
return 0;
}
Пример 4 : Програма за взаимно рекурсивни функции.
Двете функции rec1() и rec2() се извикват взаимно с намаляваща стъпка 2.

#include <iostream> //for Code Blocks
using namespace std;
void rec2 (int b);
void rec1 (int a)
{
if(a>0) rec2(a-2);
cout<< "a="<< a<< " ";
}
void rec2 (int b)
{
if(b>0) rec1(b-2);
cout<< "b="<< b<< " ";
}
int main()
{
rec1(20);
return 0;
}


Благодаря за вниманието Ви !