Ajde da se i ja oprobam u objasnjavanju. :)
Ovako recimo da pozivas f-ju sa parametrom 4 (uzeo sam ovu vrednost da objasnjavanje ne bi potrajalo).
Znaci negde u kodu imas promenljivu kojoj dodeljujes rezultat f-je fakt
Code:
long broj;
broj = fakt(4);
ovo se desava u memoriji, manje vise:
Code:
long fakt(4) // n je 4
{
long nfakt;
if (4<=1)
nfakt=1;
else
nfakt=4*fakt(3);
return nfakt;
}
e sad, posto je 4 vece od 1 prolazi se u
else deo, a tu opet imamo poziv ove iste f-je samo sa parametrom 3
Code:
long fakt(3) // n je 3
{
long nfakt;
if (3<=1)
nfakt=1;
else
nfakt=3*fakt(2);
return nfakt;
}
sad opet uslov nije zadovoljen i opet se prelazi u
else deo, i opet tu imas poziv f-je, ali sada sa parametrom 2
Code:
long fakt(2) // n je 2
{
long nfakt;
if (2<=1)
nfakt=1;
else
nfakt=2*fakt(1);
return nfakt;
}
opet ista prica i opet poziv f-je samo sa parametrom 1
Code:
long fakt(1) // n je 1
{
long nfakt;
if (1<=1)
nfakt=1;
else
nfakt=1*fakt(0);
return nfakt;
}
e sad, ova je jako bitna, ovde else deo nece biti odradjen, jer je 1 <= od 1, i nfakt ce dobiti vrednost 1 i vratiti 1 kao rezultat.
ALI NE U U GLAVNI PROGRAM, NEGO U F-JU KOJA JE TU F-JU POZVALA. U ovom slucaju f-ju fakt sa parametrom 2.
Pa ce f-ja sa parametrom 2 izgledati ovako ustvari:
Code:
long fakt(2) // n je 2
{
long nfakt;
if (2<=1)
nfakt=1;
else nfakt=2*1; // ovo je bitno, sada cemo tu imati 1 umesto f-je fakt(1) jer je tu vrednost ta f-ja vratila
return nfakt;
}
ova f-ja ce vratiti rezultat 2*1 sto je 2 i proslediti taj rez f-ji koja je nju pozvala, tj f-ji sa parametrom 3, koja ce posle vracanej vrednosti da izgleda ovako
Code:
long fakt(3) // n je 3
{
long nfakt;
if (3<=1)
nfakt=1;
else
nfakt=3*2; // jer je rezultat f-je fakt(2) 2 kao sto smo gore videli
return nfakt;
}
to znaci da ce f-ja fakt(3) vratiti 2*3 sto je 6 f-ji koja je nju pozvala, tj f-ji fakt(4)
Code:
long fakt(4) // n je 4
{
long nfakt;
if (4<=1)
nfakt=1;
else
nfakt=4*6;
return nfakt;
}
a ova f-ja vraca 4*6 sto je 24 tamo gde je ona pozvana, tju glavni program, a to je i vrednost faktorijela broja 4.
Jos jedna bitna osobina:
F-JA SE NECE ZAVRSITI DOK SE NJOJ NE VRATI VREDNOST F-JE KOJU JE ONA POZVALA, znaci fakt(4) ce cekati dok fakt(3) ne vrati njemu vrednost, a fakt(3) ce cekati dok fakt(2) ne vreti vrednost, i tako redom... Tek kad se f-ja koja nema poziva zavrsi onda se krece unazad.