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ăspunsuri la întrebare
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.