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

Buna!
Imi poate explica cineva cum functioneaza acest program recursiv?
int f(int n)
{
int c;
if (n==0)
return 9;
else
{
c=f(n/10);
if (n%10 return n%10;
else
return c;
}
}
cand ii dau valoarea 5, imi returneaza tot 5 si nu inteleg de ce..

Răspunsuri la întrebare

Răspuns de AfloareiAndrei
1

Răspuns:

Am sa repostez functia f() pentru ca ai cateva greseli la 'if-ul' din primul 'else'

#include <iostream>

using namespace std;

int f(int n)

{

 int c;

 if (n==0)

 {

   return 9;

 }

 else

 {

   c=f(n/10);

   if(n%10) // ###

   {

     return(n%10); // DIN CAUZA ASTA...EXPLICATIE LAS MAI JOS

   }

   else

   {

     return c;

   }

 }

}

int main()

{

 cout << f(5) << endl;

 cout << f(0) << endl;

}

Explicație:

###

iti returneaza valoarea 5 pentru ca conditia "if(n%10)" inseamna ca, "daca 5 modulo 10 are rest (restul impartirii > 0), sa iti returneze restul impartirii 5 / 10."

5 / 10 = cat 0 si rest 5    (10 * 0 + 5 = 5)

Modulo (%) iti arata restul unei impartiri.  


AfloareiAndrei: am uitat sa iti explic cum se comporta variabila 'c' in functia asta recursiva. Sa presupunem ca n=1413, Prima conditie 'if' nu este satisfacuta pentru ca n!=0 asa ca intram in 'else' unde c=f(n/10) => f(1413/10) se apeleaza o NOUA functie f(141)...se repeta povestea si se apeleaza o NOUA functie f(14)....se apeleaza o NOUA functie f(1)...se apeleaza o NOUA functie f(0).
AfloareiAndrei: Acum ca n =0, este satisfacuta prima conditie si programul returneaza variabilei 'c' valoarea 9. Deci c = 9. Continuam si ajungem la conditia "if(n%10)". Aici pentru ca 1413%10 are restul 3. Programul iti returneaza valoarea 3 ca rezultat final.
Alte întrebări interesante