Nein, der Unterschied zwischen Rekursion (func_a Aufrufe func_a) oder indirekte Rekursion (func_a Aufrufe func_b Aufrufe func_a) besteht darin, dass die Verwendung eines Timers für sich wiederholende Aufrufe den Stapel nicht wachsen lässt und der vorherige Zustand verloren geht.
Nein. Die Funktion wird von einer externen Quelle (dem Timer) aufgerufen, sie ist also nicht rekursiv.
Es hängt wirklich von Ihrer Definition von rekursiv ab, aber ich würde sagen, dass das Planen eines Callbacks iterativ heißt, nicht Rekursion.
Bei der Rekursion wird ein Problem in kleinere, ähnliche Probleme zerlegt, bis Sie einen Basisfall erreichen und dann möglicherweise die Ergebnisse daraus zu einer Lösung zusammenfügen. Es gibt kein "kleineres" Problem hier; Es ist nur geplant, dass derselbe Rückruf nach einer bestimmten Zeit erneut stattfindet.
Das Problem mit jeder Art von schneller und schneller Definition ist, dass Rekursion in Form von Iteration implementiert werden kann und umgekehrt.
Ist das zum Beispiel rekursiv?
%Vor% state1
und state1
bewirken, dass der andere aufgerufen wird; In gewisser Weise ist das gegenseitige Rekursion. Es wird jedoch von einer iterativen Schleife gesteuert, so dass es auch als Iteration betrachtet werden kann.
In einer Sprache, die die Optimierung von Tail-Calls unterstützt, könnte der gleiche Effekt auch dadurch erzielt werden, dass die beiden Funktionen sich rekursiv gegenseitig aufrufen (sogar in einer Sprache ohne Tail-Call-Optimierung könnten Sie das tun, aber Sie würden laufen außerhalb des Stacks sehr schnell):
%Vor%So wird die Frage wirklich, wie unterscheiden Sie, ob etwas rekursiv ist? Führt die Tatsache, dass eine Funktion sich erneut aufrufen lässt, zu einer Rekursion?
Der betreffende Code ist keine Rekursion - da der Code extern aufgerufen wird und nicht als Teil eines zyklischen Codepfads zurück zum selben Methodenaufruf.
Wikipedia hat eine großartige Seite über Rekursion hier: Wikipedia: Rekursion (Informatik)
>Also ruft hier f1 ("move") f2 ("setTimeout") auf, was wiederum f1 aufruft. Hmm .. das ist eine Rekursion, wenn f2 eine Callback-Funktion ist. Aber, wenn f2 eine Eigenschaft setzt, wie ein "Timeout". Dies ist keine Rekursion.
Ja, es ist .. aber es kann als Indirekte Rekursion aufgerufen werden.
Beispiel für direkte Rekursion wäre etwa so:
%Vor%sagten auch andere .. die Funktion nennt sich ..
Nein, die Funktion ruft sich nicht selbst auf. Es wäre rekursiv, wenn sich die Funktion im Körper von move selbst nennt.
Tags und Links javascript recursion