Informatică, întrebare adresată de adyg96, 9 ani în urmă

Cum se efectueaza calculul recursiv in acest caz:

int F2(int x);
int F1(int x)
{
if (x<7) {return 3+x;}
else {return 2+F2(x-2);}
}

int F2(int x)
{
if(x<10) {return 3*x;}
else {return 2 * F1(x/2);}
}

de exemplu pentru apelul F1(44) ce returneaza functia?


antonii: Pentru o astfel de problema eu as fi dat >25 de uncte. 25 MINIM!Stii cat iti ia sa explici asa ceva. Uita-te pe profilul meu si o sa vezi ca recent am raspuns la o astfel de intrebare.

Răspunsuri la întrebare

Răspuns de Gillga
0
pentru F1 (44) lucreaza astfel:
intra in prima functie, verifica daca x <7 , rezultatul e fals, deci se duce in else, unde returneaza2+F2 (x-2)

acum ajungem in f2 (44-2), adica f2 (42).
aici verifica daca x <10, fals , se duce in else si returneaza 2*f1 (x/2) dar sa nu uitam de +2-ul precedent; deci avem 2+(2*f1 (x/2))

am ajuns iar in f1 (21), unde x >7 deci se duce in else, unde returneaza 2+f2 (x-2) cu ceea ce avem inainte ajunge 2+(2*(2+f2 (x-2)))

suntem in f2 (19) unde x>10; deci returneaza 2*f1 (x/2) cu precedentele : 2+(2*(2+(2*f1 (x/2))))

acum inapoi in f1 (9); dar x>7 , deci return de 2+f2 (x-2) adica 2+(2*(2+(2*(2+f2 (x-2)))))

si acum am ajuns la final unde x < 10 ( acesta are valoarea 7) , deci returneaza 3*x
adica:
2+(2*(2+(2*(2+(3*7)))))= 98

Functiile recursive se inchid in sens invers fata de cum se deschid, ultima deschisa e prima inchisa; respectiv prima deschisa este ultima inchisa. Acestea efectueaza operatiile in ordine inversa, de aceea am pus acele paranteze; daca ar fii sa transforme parantezele inapoi ai ajunge cu f1; respectiv f2 pana la inceput, acesta fiin f1 (44).


Sper ca te ajuta; daca ai intrebari , nu ezita sa intrebi; bafta. ^-^
Alte întrebări interesante