
Salut, sunt Serban si acesta este al treizecisiunulea tutorial dintr-o suita de tutoriale ale limbajului C++, tutoriale ce le voi face pentru tutorialevideo.info; In acest tutorial vom discuta despre recursivitate. Recursivitatea este un procedeu foarte important in programare si totodata unul elegant. Acesta se aplica in cadrul functiilor. Spunem despre o functie ca este recursiva daca ea se apeleaza singura. Cu alte cuvinte, in cadrul executiei unei functii din programul nostru, aceasta trebuie cel putin o data sa se invoce pe sine. Cel mai important aspect al recursivitatii consta in adaugarea in functia respectiva a unei conditii de oprire a functiei. Sa presupunem ca avem o functie a carei prima instructiune din cadru-i va fi un apel al ei insisi. Ei bine, aceasta functie va rula, asa cum se spune, ‘la infinit’. In realitate, va rula pana cand zona sa de stiva sau stack(asa cum am numit-o in tutorialele anterioare) nu va mai putea sustine un alt apel de functie. Cu alte cuvinte, se va ajunge la un Stack Overflow. Astfel, o conditie de oprire este necesara, insa ea nu garanteaza in totalitate ca nu se va ajunge la un Stack Overflow, deoarece functia se poate apela de indeajuns de multe ori, incat sa fie prea mult, desi aceasta are o conditie de oprire. Conditia de oprire va face sa se iasa din functie cand s-a ajuns la un anumit caz al functiei, iar in tutorial vom vedea un exemplu concret.
Recursivitatea presupune schimbarea abordarii unei probleme si uneori poate deveni foarte provocatoare.
Este o modalitate eleganta de a programa. Multe componente ale Computer Science folosesc recursivitatea. Spre exemplu, compilatoarele folosesc foarte mult recursivitatea, deoarece sunt limbaje, asa cum este si C++, ce permit de exemplu if-uri imbricate(if in if). De altfel, multi algoritmi, inclusiv cei pentru arbori folosesc foarte mult conceptul
de recursivitate.
#include<iostream>
#include<string>
using namespace std;
void CountDown(int nValue) {
if (nValue > 0)
CountDown(nValue-1);
cout << nValue << endl;
}
int SumTo(int nValue) {
if (nValue <=1)
return nValue;
else
return SumTo(nValue – 1) + nValue;
}
int Fibonacci(int nNumber) {
if (nNumber == 0)
return 0;
if (nNumber == 1)
return 1;
return Fibonacci(nNumber-1) + Fibonacci(nNumber-2);
}
int main() {
CountDown(10);
int sum = SumTo(5);
cout << „––––n” << sum << endl;
int fibo = Fibonacci(5);
cout << „––––n” << fibo << endl;
return 0;
}
NU uitati: cititi si documentati-va in plus, nu parcurgeti _doar_ aceste tutoriale pentru ca nu sunt indeajuns pentru a va dezvolta calitatile de coding, ci sunt doar mici rampe de lansare catre cunoastere. Dupa fiecare tutorial vizionat, abordati subiectul dezbatut in acesta pe net, in cartea `Thinking in C++`, in sectiunea de comentarii.
NU lasati sa treaca pe langa voi o informatie neclara, pentru ca orice farama de cunoastere este importanta.