Verstehen von F # tail-recursive

8

Kürzlich lerne ich F #. Ich versuche das Problem auf verschiedene Arten zu lösen. So:

%Vor%

Ich dachte, die Ergebnisse von V2 und V3 sollten gleich sein. Aber ich bekomme das Ergebnis unten:

%Vor%

Warum sind die Ergebnisse von V2 und V3 anders?

    
kev 01.06.2010, 08:21
quelle

1 Antwort

11

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.

    
Yin Zhu 01.06.2010, 08:50
quelle

Tags und Links