nutzu2010 wrote:ok...deci el o iau inapoi pana la 56 si scrie x mod 10
dar de ce sare peste f(x div 5) ?
X div 5? cred ca ai vrut sa spui X div 2 .
Sa o luam pas cu pas.
Asta e acelasi cod copiat sa iti fie la indemana:
- procedure F(x:integer);
- begin
- if x<>0 then
- begin
- F(x div 2);
- write (x mod 10)
- end;
- end;
X1,X2,X3,X4,X5,X6,X7 - sunt x-urile din procedura F() . Le-am notat asa pentru ca sunt variabile diferite! De fiecare data cand este apelata procedura F() se aloca memorie speciala pentru un X (adica se face loc in memorie pentru variabila x din procedura). Numarul de dupa X arata adancimea recursiunii.
- begin
- Se apeleaza procedura f(56);
- X1 devine 56.
- Este X1 diferit de 0? DA->
- |begin
- |Se apeleaza procedura f(28);
- |X2 devine 28.
- |Este X2 diferit de 0? DA->
- | |begin
- | |Se apeleaza procedura f(14);
- | |X3 devine 14.
- | |Este X3 diferit de 0? DA->
- | | |begin
- | | |Se apeleaza procedura f(7);
- | | |X4 devine 7.
- | | |Este X4 diferit de 0? DA->
- | | | |begin
- | | | |Se apeleaza procedura f(3);
- | | | |X5 devine 3.
- | | | |Exte X5 diferit de 0? DA->
- | | | | |begin
- | | | | |Se apealeaza procedura f(1);
- | | | | |X6 devine 1.
- | | | | |Este X6 diferit de 0? DA->
- | | | | | |begin
- | | | | | |Se apeleaza procedura f(0);
- | | | | | |X7 devine 0.
- | | | | | |Este X7 diferit de 0? NU->
- | | | | | | | inapoi un nivel {aici cred ca te referi ca sare }
- | | | | | |Scrie X6 mod 10 {adica 1}
- | | | | | |end;
- | | | | |Scrie X5 mod 10 {adica 3}
- | | | | |end;
- | | | |Scrie X4 mod 10 {adica 7}
- | | | |end;
- | | |Scrie X3 mod 10 {adica 4}
- | | |end;
- | |Scrie X2 mod 10 {adica 8}
- | |end;
- |Scrie X1 mod 10 {adica 6}
- |end;
- end;
Aici poti observa cum creste codul daca il "desfaci".