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
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.
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
Alte întrebări interesante
Istorie,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă