Poate sa imi explice cineva, pas cu pas, cum ajunge la rezultatul "11"? Nu inteleg deoarece aici: h(n-1)+2*h(n-2); sunt doua H-uri si ma incurca...

#include
using namespace std;

int h(int n){
if(n<=1)
return n;
else
return h(n-1)+2*h(n-2);
}

main(){
cout << endl << h(5);
}

Răspuns :

h(5)

a)n=5<=1 nu => ret: h(4)+2h(3)

b) primu apel din linia a) n=4<=1 nu=> ret: h(3)+2h(2)

c) primu apel din linia b) n=3<=1 nu=> ret: h(2)+2h(1)

d) primu apel din linia c) n=2<=1 nu=> ret: h(1)+2h(0)

e) primu apel din linia d) n=1<=1 da ret: n=1 h(1)=1

f) al doilea apel din linia d) n=0<=1 da ret: n=0 h(0)=0

g) din linia d) se returneaza h(1)+2h(0)=1+2*0=1 h(2)=1

h) al doilea apel din linia c) este h(1) care calculat mai sus reiere h(1)=1 deci h(3)=h(2)+2*h(1)=1+2*1=3

i) al doilea apel din linia b) calculeaza h(2) care a fost calculat anterior dupa care ni se returneaza pt h(4) = h(3)+2*h(2) =3+2*1=5

j) al doilea  apel recursiv din linia a este pentru h(3) care stim ca este 3 iar atunci se returneaza pt h(5) = h(4)+2*h(3) = 5+2*3=11.

Daca trasezi executia o sa vezi cum se tot apeleaza recursiv.