Recursivitate

Rezolvarea problemelor de matematica prin realizarea unor programe.
elev98
junior
junior
Mesaje: 100
Membru din: 25 Aug 2014, 23:47

Recursivitate

Mesaj de elev98 » 17 Ian 2016, 14:03

Buna ziua! In varianta 11 sub III din 2009 am gasit un program pe care nu-l inteleg. L-am introdus in CodeBlocks si mi-am dat seama ca afiseaza cea mai mica cifra a unui numar dar nu-mi dau seama cum o face. Ati putea, va rog sa imi explicati cum functioneaza?

int f(int n)
{
int c;
if (n==0) return 9;
else
{
c=f(n/10);
if (n%10<c) return n%10;
else return c;
}
}

A_Cristian
guru
guru
Mesaje: 1975
Membru din: 23 Feb 2015, 17:15

Mesaj de A_Cristian » 17 Ian 2016, 16:35

Pana unde ai inteles ca sa stim cum sa te indrumam?

elev98
junior
junior
Mesaje: 100
Membru din: 25 Aug 2014, 23:47

Mesaj de elev98 » 17 Ian 2016, 16:54

Sincer, nu am inteles deloc programul...

A_Cristian
guru
guru
Mesaje: 1975
Membru din: 23 Feb 2015, 17:15

Mesaj de A_Cristian » 17 Ian 2016, 17:11

Uite un exemplu:
Fie n=2513

Cod: Selectaţi tot

f&#40;2513&#41; - primul apel
  n1!=0
  c1 = f&#40;251&#41; - al doilea apel
       n2!=0
       c2 = f&#40;25&#41; - al treilea apel
           n3!=0
           c3=f&#40;2&#41;
               n4!=0
               c4=f&#40;0&#41;
                   n=0; return 9;
               c4=9;
               compar c4 cu n4%10 &#40;adica 9 cu 2&#41;
               intoarce 2
           c3=2
           compar c3 cu n3%10 &#40;adica 2 cu 5&#41;
           intoarce 2
       c2=2
       compar c2 cu n2%10 &#40;adica 2 cu 1&#41;
       intoarce 1
    c1=1
    compar c1 cu n1 % 10 &#40;adica 1 cu 3&#41;
    intoarce 1
Trebuie sa intelegi ca n si c sunt ambele valori locale functiei. Fiecare apel de functie va avea propria "versiune" de n si c. Acesta este motivul pentru care le-am denumit c1,c2,..., n1,n2... Adica c1 si n1 sunt valori obtinute inainte de a iesi din primul apel.

elev98
junior
junior
Mesaje: 100
Membru din: 25 Aug 2014, 23:47

Mesaj de elev98 » 17 Ian 2016, 18:59

Va multumesc foarte mult! Acum am inteles.

Scrie răspuns