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 ?
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.