Intrebare tehnica

Salut o sa atasez un cod unde o sa las si o intrebare putin mai tehnica de tip StackOverflow
void f() {
static int k = 4;
if (–k) {
f();
cout << “k=” << k << endl;
}

}
int main()
{
f();
return 0;
}

De ce la apelul acestei functii recursive K-ul v-a afisa de 3 ori 0 si nu isi pastreaza valoarea gen 3 dupa 2 dupa 1 si iese ?
Stiu ca la recursivitate se pune in stiva cu o adresa de revenire si static ma ajuta sa mentin valoarea acelei date ca sa nu se piarda pe parcursul rularii programului , dar de ce devine 0 ?

Intrebarea cheie aici e: cand e afisat k-ul tau? Eventual foloseste un debugger daca nu-ti poti imagina ce se intampla.

Intrebarea e de ce la afisarea k-ului , k-ul este 0 0 0 si nu 3,2,1

Pai de-aia ti-am raspuns cu o intrebare, ca sa ai o idee de unde sa pornesti. Raspunsul nu ti-l dau, e mai bine sa-l gandesti singur.

Am sa folosesc debuggerul.

Cred ca am gasit solutia, se apeleaza recursiv functia si in acelasi timp se decrementeaza k-ul pana devine 0 si pe stiva se duc 3 afisari cu o adresa de revenire si k-ul avand valoarea 0 o sa il afiseze 0 0 0

Cam asa. Apelul revine doar dupa ce decrementarea ajunge la 0. E mult mai bine sa-ti bati tu capul cu un subiect, ai sanse sa-l intelegi mult mai bine asa.

1 Like

Numa ca sa te obisnuiesti cu ideea: adauga indentare, te rog.

// admin edit: Cum să ceri ajutor pe forum?

1 Like