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
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.
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!