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

de ce programul
void f(int x)
{
if(x>0)
if(x%4==0)
{
cout<<'x';
f(x-1);
}
else
{
f(x/3);
cout<<'y';
}
}

pt f(26) afiseaza xyyy si nu yxyy


Razzvy: Pentru ca in cazul al doilea, unde x este divizibil cu 3, mai intai se apeleaza functia recursiva si apoi se afiseaza y. De aceea, y-urile vor fi mereu la sfarsit.
smallworldsanalolee: am parcurs functia recursiva pana am ajuns la 0, dar mi-a iesit xyy si nu xyyy
smallworldsanalolee: dar tot nu imi dau seama, de unde stiu cate y-uri tb sa pun?

Răspunsuri la întrebare

Răspuns de gabi54t
6

x=26

26%4==0 (F)

x=8

8%4==0 (A)

se afiseaza un x si apelezi f(x-1)

x=7

7%4==0 (F)

x=2

2%4==0 (F)

x=0 (aici se termina)

si acum iti afiseaza fiecare y (pt f(2), f(7) si f(26))

gen cand ai cout dupa apelarea functiei asteapta sa se termine apelarea (in cazul asta dupa ce x devine 0 se opreste)


smallworldsanalolee: Multumesc!!
smallworldsanalolee: Am o intrebare, dupa ce am parcurs toata functia si am ajuns la 0 si incepe afisarea y-cilor, acestia se afiseaza in ordine inversa?
smallworldsanalolee: Abia acum am citit partea cu "si acum iti afiseaza fiecare y (pt f(2), f(7) si f(26))" deci da, se afiseaza invers
gabi54t: daca nu ma insel, da le ia invers
Alte întrebări interesante