Damit eine Funktion tail-rekursiv ist, muss nach der Rückgabe der Funktion nichts weiter zu tun sein, als ihren Wert zurückzugeben. Das heißt, das letzte, was im rekursiven Schritt passiert, ist der Aufruf der Funktion selbst. Dies wird im Allgemeinen durch Verwendung eines Akkumulatorparameters erreicht, um die Antwort zu verfolgen:
%Vor%Die obige Prozedur wird zunächst mit %code% als Akkumulator wie folgt aufgerufen:
%Vor%Beachten Sie, dass der akkumulierte Wert zurückgegeben wird, wenn der Basisfall erreicht wird, und dass der Parameter %code% an jedem Punkt des rekursiven Aufrufs aktualisiert wird. Ich musste der Prozedur einen zusätzlichen Parameter hinzufügen, aber dies kann vermieden werden, indem man eine innere Prozedur oder eine benannte %code% definiert, zum Beispiel:
%Vor%Ich lerne für einen Weihnachtstest und mache ein paar Prüfungsfragen, ich bin auf dieses Problem gestoßen, das mich ein wenig ratlos macht.
Ich kann reguläre Rekursion gut machen, aber ich kann nicht meinen Kopf darum drehen, wie ich dasselbe mit der Schwanzrekursion schreiben kann.
Reguläre Version:
%Vor%