Informatică, întrebare adresată de Alexandru987, 8 ani în urmă

Ajutor, imi da 5310, dar nu e bine as avea nevoie de o explicatie sa inteleg.

Anexe:

boiustef: dar ce afişează când e bn???
îmi dă 5310135
Alexandru987: da asta e raspunsul

Răspunsuri la întrebare

Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

void f(long n)

{

   cout << n%10;

   if (n!=0)

   {

       f(n/100); cout << n%10;

   }

}

int main()

{

   f(12345);

   return 0;

}

Explicație:

Am arătat un tabel cu paşii de execuţie, a apelurilor recursive

La momentul n=12345 şi apelul f(12345)

se execută primul cout, cu afişarea ultimei cifre, se verifică n!=0, şi dacă e true se execută blocul lui if, care conţine un autoapel la subprogram. La acest nivel n=12345, când se va realiza apelul, atunci n va primi valoarea n/100. La cest nivel cînd se vor termina autoapelurile, se vor executa al doilea cout ce va afişa ultima cifră a lui n, care diferă de la nivel la nivel.

Sper că am fost explicit...

Recursia la apelurile recursive crează o stivă a locaţiilor de memorie (cât este adevărată condiţia lui if), fiecare nivel pentru diferite valori ale lui n. Parcă ar fi un urcuş la alte etaje, cât condiţia e true. În momentul când condiţia e false se începe coborârea de la etajul de sus în jos cu executarea acelor instrucţiuni care nu au fost executate la etajul respectiv...

Succese!

Anexe:

Alexandru987: mersi mult de explicatii sunt geniale
Alexandru987: alta viata mersi
boiustef: cu plăcere, mă simt şi eu mai bine dacă am uşurat viaţa cuiva... :))))
Alte întrebări interesante