Informatică, întrebare adresată de misto123, 9 ani în urmă

imi explica cineva cum se lucreaza?
Scrieţi valoarea care se obţine în urma apelului f(5427)

Anexe:

Răspunsuri la întrebare

Răspuns de antonii
1
Trebuie sa te gandesti ce se intampla la ce inceput si la final. 

Codul spune ca daca x e zero sa dea return 0.Deci  in cele din urma (prin imapartiri repetate : f(x/10)) functia va da 0. Deci f(x/10)*10 la un moment dat va fi 0 (asta la sfarsit).

Un alt lucru pe care trebuie sa observi e ca functia depinde de ultima cifra (X%2==1 - inseamana ca restul sa fie 1 adica numarul sa fie IMPAR).

Daca nr. e impar (adica NU se termina in 0,2,4,6,8)   atunci sa returneze f(x/10) care inseamna numarul fara ultima cifra (5427/10=542) *10+ultima cifra a numarului (care va fi 1,3,5,7,9)-1 (adica ultima cifra va fi transformata intruna para -> 3-1=2)

Daca nr. e par atunci sa returneze f(x/10)*10+(ultima cifra +1 ) -->impar

Acum iei numarul tau 5427 si il treci prin cod:
      x%2==1 (adevarat deoarece 5427 e impar). Deci returneaza (aceasta va fi valoarea care ne intereseaza sa afisam):   
                       f(542)*10+7-1=f(542)*10+6
     f(542)=f(54)*10+2+1=f(54)*10+3
     f(54)=f(5)*10+4+1=f(5)*10+5
     f(5)=f(0)*10+4=4
     f(0)=0

Adunam si ne da: [(4*10+5)*10+3]*10+6=4536

Si daca n-ai observat pana acum poti spune deja ce face algoritmul. Pentru fiecare cifra ii va adauga 1 daca para si va scadea 1 daca impara.


antonii: aaaa...n-am vazut f(x/10)*10...corectez acum
misto123: am inteles totul pana la partea cu adunarea.... de unde vine 4*10+5?
antonii: De fapt inlocuiesti...Pe f(542) il inlocuiesti cu f(54)*10+3 ..pe f(54) cu f(5)*10+5..etc. Doar inlocuiesti.
antonii: 4*10+5 vine de la f(54)=f(5)*10+5. f(5) e 4.
misto123: gata, am inteles, multumesc mult
Alte întrebări interesante