👤

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
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!


ID Learners: Alte intrebari