Definieren einer rekursiven Methode für ein Objekt:
%Vor%gibt:
%Vor%Aber es in einer Klasse definieren:
%Vor%gibt:
%Vor%Die Methoden sind identisch. Warum ist es nicht tail rekursiv, wenn es in einer Klasse definiert ist?
Wenn die Tail-Rekursion ausgeführt werden soll, kann recurse
nicht überschrieben werden. Wenn recurse
wie in Ihrer class
-Deklaration überschrieben werden kann, muss jede Rekursion in ihr den dynamischen Methodenaufruf verwenden (da er möglicherweise polymorph ist), der nicht für eine gotoartige Anweisung optimiert werden kann.
Die object
singleton-Deklaration stellt statisch den unzweideutigen Aufruf von recurse sicher und lässt den Compiler mit der Tail-Recursion-Optimierung fortfahren.