Imamo f-ju power (3,3).
Ona ce da vrati mult (3,power(3,2))
power (3,2) ce da vrati mult(3,power(3,1))
tako da predhodna f-ja ustvari vraca mult(3,mult(3,power(3,1)))
power (3,1) vraca mult(3,power(3,0))
Tako da prva ustvari vraca mult(3,mult(3,mult(3,power(3,0))))
power(3,0) vraca 1
Sada prvobitna vraca konacno mult(3,mult(3,mult(3,1)))
Sada nam ostaje da "rascistimo" sta vracaju ovi silni multovi (*eb'o ih ko ih smisli, pocecemo da mucamo od ovoga

)
idemo "iznutra", sta vraca mult(3,1)
vraca 3+mult(3,0), a mult(3,0) vraca 0, sto znaci 3, samim tim ona nasa glavna vraca
mult(3,mult(3,3))
Sta vraca mult (3,3)
Prvi korak 3+mult(3,2) drugi: 3+3+mult(3,1) treci: 3+3+3+mult(3,0) cetvrti:3+3+3+0=9
Sto znaci da nasa prvobitna vraca mult(3,9)
A i to cemo sada izracunati :
mult(3,9)=3+mult(3,8 )=3+3+mult(3,7)=3+3+3+mult(3,6)=3+3+3+3+mult(3,5)=3+3+3+3+3+mult(3,4)=3+3+3+3+3+3+mult(3,3)=3+3+3+3+3+3+9
Poslednja devetka je mult(3,3) sto smo izracunali u proslom koraku
Sveukupno, ovo sve vraca 6*3+9=
27
Dokaz:
(file /root/Desktop/proba/proba.cpp)
Code:
#include <iostream.h>
int mult(int m, int n)
{
if(n == 0 || m == 0)
return 0;
if(n<0) {
n=-n;
m=-m;
}
return m + mult(m, n - 1);
}
int power(int m, int n)
{
if(m == 0)
return 0;
if(n == 0)
return 1;
return mult(m, power(m, n - 1));
}
int main()
{
cout<<power(3,3);
return 0;
}
Rezultat pokretanja:
Code:
root@slack:~/Desktop/proba# g++ proba.cpp
root@slack:~/Desktop/proba# ./a.out
27
root@slack:~/Desktop/proba#
Jasno kao dan!

Ne treba ciljati u metu vec metati u cilj