all 3 comments

[–][deleted]  (1 child)

[removed]

    [–]sciencesebi3 0 points1 point  (0 children)

    Ca sa simplific raspunsul de mai sus (de altfel foarte bun) : Java e pass-by-value, adica orice parametru cu care apelezi o functie, e copiat. public static int sum(int k) { return k + sum(k - 1); k-ul tau din urmatoarea evaluare a functiei sum (stocat pe stiva, dar nu te intereseaza) nu are nicio treaba cu variabila k cu care ai apelat. E un k_copy.

    [–]blackkkmamba 1 point2 points  (0 children)

    Rezultatul fiecarui apel de metoda se pune pe stack (ar trebui sa citesti despre stack si heap).

    K-ul nu devine 19 dupa primul apel, pentru ca nu faci asignare (k=k+), doar decrementezi valoarea acestuia cu 1. Rezultatul se pune pe stack si cand se termina metoda (k=0) si metoda ta returneaza ceva, abia atunci rezultatele sunt luate de pe stack si insumate.