👤

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

Ajutor Imi Da 5310 Dar Nu E Bine As Avea Nevoie De O Explicatie Sa Inteleg class=

Răspuns :

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!

Vezi imaginea BOIUSTEF