Răspuns :
E asa de greu?
Functia recursiva practic se reapeleaza. Cand face asta executia in functia mama e blocata si se ruleaza noua functie (apelata).
De asemenea fucntia TREBUIE sa aiba o conditie de iesire (altfel va rula la nesfarsit).
In cazul tau conditia de iesire e n=0. (de aici -->if(!n)...). Daca n nu e zero atunci inmulteste n cu f(n-1). Daca te uiti bine o sa-ti dai seama de ceva. Apeland functia fact(3) (ex.) atunci 3 va fi inmultit cu 2 si ,cand n ajunge 0 , cu 1.
Poti vizualiza astfel(alt exemplu):
fact(5)-> n=5 (n e dif. de 0) =>5*fact(5-1)=5*fact(4)
fact(4)-> n=4 =>4*fact(3)
....
fact(0)-> n e zero deci va da return 1.
Si acum poti spune ca fiecare functie intra in colaps. Odata ce fact(0) a returnat 1 (si incheie ciclul) fiecare alta functie deschisa (cu n-ul 1,2,3,4 si 5) se va termina. Asa ca fact(1)=n*fact(0)=1*1
fact(2)=2*fact(1)=2*1
fact(3)=3*fact(2)=6
fact(4)=4*fact(3)=24
fact(5)=5*fact(4)=120
(observi ca fact(5) nu va da niciun return pana cand fact(4) nu da return ...si tot asa)
Functia recursiva practic se reapeleaza. Cand face asta executia in functia mama e blocata si se ruleaza noua functie (apelata).
De asemenea fucntia TREBUIE sa aiba o conditie de iesire (altfel va rula la nesfarsit).
In cazul tau conditia de iesire e n=0. (de aici -->if(!n)...). Daca n nu e zero atunci inmulteste n cu f(n-1). Daca te uiti bine o sa-ti dai seama de ceva. Apeland functia fact(3) (ex.) atunci 3 va fi inmultit cu 2 si ,cand n ajunge 0 , cu 1.
Poti vizualiza astfel(alt exemplu):
fact(5)-> n=5 (n e dif. de 0) =>5*fact(5-1)=5*fact(4)
fact(4)-> n=4 =>4*fact(3)
....
fact(0)-> n e zero deci va da return 1.
Si acum poti spune ca fiecare functie intra in colaps. Odata ce fact(0) a returnat 1 (si incheie ciclul) fiecare alta functie deschisa (cu n-ul 1,2,3,4 si 5) se va termina. Asa ca fact(1)=n*fact(0)=1*1
fact(2)=2*fact(1)=2*1
fact(3)=3*fact(2)=6
fact(4)=4*fact(3)=24
fact(5)=5*fact(4)=120
(observi ca fact(5) nu va da niciun return pana cand fact(4) nu da return ...si tot asa)
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Ne dorim ca informațiile furnizate să vă fi fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Revenirea dumneavoastră ne bucură, iar pentru acces rapid, adăugați-ne la favorite!