Ajutor, imi da 5310, dar nu e bine as avea nevoie de o explicatie sa inteleg.
Răspunsuri la întrebare
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!
îmi dă 5310135