Als «tail-call» getaggte Fragen

8
Welche Methoden gibt es, um einen Stapelüberlauf in einem rekursiven Algorithmus zu vermeiden?
Frage Wie kann ein durch einen rekursiven Algorithmus verursachter Stapelüberlauf behoben werden? Beispiel Ich versuche das Project Euler-Problem 14 zu lösen und habe beschlossen, es mit einem rekursiven Algorithmus zu versuchen. Das Programm stoppt jedoch mit einem java.lang.StackOverflowError. Verständlicherweise. Der Algorithmus hat den Stack tatsächlich überlaufen lassen, weil ich versucht …

4
Welche Einschränkungen hat die JVM für die Tail-Call-Optimierung
Clojure führt die Tail-Call-Optimierung nicht alleine durch: Wenn Sie eine Tail-Recursive-Funktion haben und diese optimieren möchten, müssen Sie das spezielle Formular verwenden recur. Wenn Sie zwei sich gegenseitig rekursive Funktionen haben, können Sie diese ebenfalls nur mithilfe von optimieren trampoline. Der Scala-Compiler kann TCO für eine rekursive Funktion ausführen, jedoch …
36 scala  clojure  jvm  tail-call 

2
Y-Kombinator- und Tail-Call-Optimierungen
Die Definition eines Y-Kombinators in F # lautet let rec y f x = f (y f) x Als erstes Argument erwartet f eine Fortsetzung der rekursiven Teilprobleme. Wenn wir das yf als Fortsetzung verwenden, sehen wir, dass f auf aufeinander folgende Aufrufe angewendet wird, sobald wir uns entwickeln können …

3
Was sind die Alternativen zur Verwendung eines Stacks zur Darstellung der Funktionsaufrufsemantik?
Wir alle wissen und lieben, dass Funktionsaufrufe normalerweise über den Stack implementiert werden. Es gibt Frames, Absenderadressen, Parameter, das ganze Los. Der Stack ist jedoch ein Implementierungsdetail: Aufrufkonventionen können verschiedene Aufgaben ausführen (dh x86-Fastcall verwendet (einige) Register, MIPS und Follower verwenden Registerfenster usw.) und Optimierungen können sogar andere Aufgaben ausführen …

4
Wenn es keine Gesamtbetriebskosten gibt, wann müssen Sie sich Sorgen machen, den Stapel zu sprengen?
Jedes Mal, wenn über eine neue Programmiersprache diskutiert wird, die auf die JVM abzielt, werden unvermeidlich Dinge gesagt wie: "Die JVM unterstützt keine Tail-Call-Optimierung, daher sage ich viele explodierende Stacks voraus." Es gibt Tausende von Variationen zu diesem Thema. Jetzt weiß ich, dass einige Sprachen, wie zum Beispiel Clojure, ein …
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.