2 svar
96 visningar
Didar 212
Postad: 11 nov 2022 21:45

förklaringa av kod Rekursion

Hej jag behöver förklaring på denna kod,så som jag har tänkt är att när jag matar in ett värde t.ex 4 så tas det emot i result.

 

första gången koden körs blir: 

1).      4 + sum(4-1) ==> 4+3

andra gången:

2)       4+3+sum(3-1)  ==> 4+3+2

tredje:

3)     4+3+2+sum(2-1) ==> 4+3+2+1

fjärde:

4) 4+3+2+1+sum(1-1) ==> 4+3+2+1+0

sum = 10 tillslut skriver den ut summan av de 4 talen

 

Rätta mig om jag tänker fel

 

 

anders_k 237
Postad: 12 nov 2022 07:03

lite förenklat, när du har ett uttryck som

result = tal + sum(tal - 1)

kommer det uttrycket att bara räknas samman när man vet vad "sum" returnerar, men i och med att sum är rekursivt kommer alla rekursiva anrop att först göras innan den första summeringen "tal + sum" görs.

när det sista anropet gjorts dvs sum(0), först då börjar alla sum-funktioner som du har ropat i en kedja (call stack)  att ge returvärden och först då summeras alla värdena ihop, dvs de kör i motsatt ordning än vad du har kallat dem.

så följden blir istället 0 + 1 + 2 + 3 + 4.

f.ö. tycker jag det är bra att du använder "assert" - det är en bra vana.

Didar 212
Postad: 12 nov 2022 16:11
anders_k skrev:

lite förenklat, när du har ett uttryck som

result = tal + sum(tal - 1)

kommer det uttrycket att bara räknas samman när man vet vad "sum" returnerar, men i och med att sum är rekursivt kommer alla rekursiva anrop att först göras innan den första summeringen "tal + sum" görs.

när det sista anropet gjorts dvs sum(0), först då börjar alla sum-funktioner som du har ropat i en kedja (call stack)  att ge returvärden och först då summeras alla värdena ihop, dvs de kör i motsatt ordning än vad du har kallat dem.

så följden blir istället 0 + 1 + 2 + 3 + 4.

f.ö. tycker jag det är bra att du använder "assert" - det är en bra vana.

Tack för en bra förklaring Anders!

Svara
Close