V2 verwendet die standardmäßige akkumulierende Variable , um die Tail-Rekursion auszuführen:
%Vor%V3 verwendet Fortsetzung , oder in einfachem Englisch, eine akkumulierende Funktion :
%Vor%Sie können den Unterschied zwischen kumulierenden Variablen und akkumulierenden Funktionen sehen:
Die Verwendung akkumulierender Variablen endet beim letzten Aufruf, da die akkumulierende Variable die Antwort speichert. Die Akkumulationsfunktion führt jedoch nach dem letzten Aufruf noch einige Zurückverfolgung durch. Es sollte beachtet werden, dass die Verwendung akkumulierender Funktionen tail rekursiv ist, da der rekursive Aufruf loop t (fun ls -> accfun ((a,b,c)::ls))
tatsächlich die letzte Anweisung dieser Funktion ist.
Übrigens ist der von Ihnen bereitgestellte Code ein gutes Beispiel, um die rekursiven Funktionen des Tail-Tail anzuzeigen. Eine Möglichkeit, diesen Beispielcode zu verstehen, besteht darin, wie in den beiden obigen Abbildungen kleine Fälle zu bearbeiten . Nachdem Sie an einigen kleinen Fällen gearbeitet haben, werden Sie das Konzept tiefer verstehen.
Tags und Links f# tail-recursion