Understanding how recursive functions wor

Wie der Titel verdeutlicht, habe ich eine sehr grundlegende Programmierfrage, die ich bisher noch nicht beantworten konnte. Herausfiltern aller (äußerst cleveren) "Um die Rekursion zu verstehen, müssen Sie zuerst die Rekursion verstehen." Antworten von verschiedenen Online-Threads bekomme ich immer noch nicht ganz hin.

Verstehen Sie, dass wir, wenn wir nicht wissen, was wir nicht wissen, dazu neigen können, die falschen Fragen zu stellen oder die richtigen Fragen falsch zu stellen. Ich teile, was ich denke, meine Frage ist in der Hoffnung, dass jemand mit einer ähnlichen Perspektive teilen kann Ein bisschen Wissen, das mir hilft, die rekursive Glühbirne einzuschalten!

Hier ist die Funktion (die Syntax ist in Swift geschrieben):

func sumInts(a: Int, b: Int) -> Int {
    if (a > b) {
        return 0
    } else {
        return a + sumInts(a: a + 1, b: b)
    }
}

Wir verwenden 2 und 5 als Argumente:

println(sumInts(a: 2, b: 5))

Offensichtlich ist die Antwort 14. Aber ich bin nicht sicher, wie dieser Wert erreicht wird.

Das sind meine 2 Hangups:

Die Funktion wird solange rekursiv aufgerufen, bis eine Bedingung erfüllt ist. Diese Bedingung ist a> b. Wenn diese Bedingung erfüllt ist, geben Sie 0 zurück. Auf den ersten Blick würde ich erwarten, dass der Rückgabewert 0 ist, was offensichtlich falsch ist.

Drucke den Wert von 'a' bei jeder Iteration aus, ergebe ich einen Wert, den ich erwarten würde: 2, 3, 4, 5 (an welchem Punkt 5 + 1> b, der die erste Bedingung erfüllt: a> b), aber ich ziehe immer noch an sehe nicht, wie der Wert von 14 erreicht wird.

Mein erster Gedanke ist, dass etwas Ähnliches wie das Folgende magisch passiert:

var answer = a;
answer += a+1 until a > b;
return answer;   

So ausgeschlossen Magie, ich bekomme nur etwas nicht. Ich würde gerne verstehen, was nicht nur implizit passiert.

Wenn jemand erklären könnte, was technisch bei dieser Art von Funktion passiert und warum das Ergebnis nicht 0 ist und wiea + sumInts(a: a + 1, b: b) = 14, Ich wäre für immer in deiner Schuld.

Antworten auf die Frage(18)

Ihre Antwort auf die Frage