Kann dies rekursiv genannt werden?

8
%Vor%

Kann das rekursiv genannt werden? Wenn ja, könnten Sie eine Referenz angeben?

    
YOU 13.01.2010, 07:04
quelle

9 Antworten

13

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.

    
stacker 13.01.2010, 07:18
quelle
3

Nein. Die Funktion wird von einer externen Quelle (dem Timer) aufgerufen, sie ist also nicht rekursiv.

    
Ignacio Vazquez-Abrams 13.01.2010 07:06
quelle
3

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?

    
Brian Campbell 13.01.2010 07:21
quelle
2

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)

>     
Kevin McKelvin 13.01.2010 07:32
quelle
2

Ich würde es eine inverse Schleife mit einer Verzögerung nennen.

Wenn die Funktion zurückkehrt, wird sie nicht in eine vorherige Aufrufinstanz von sich selbst zurückversetzt. Daher gibt es keinen tiefen "Aufruf-Stack", wie er typischerweise in Rekursionen auftritt.

    
naivists 13.01.2010 07:54
quelle
1

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.

    
user59634 13.01.2010 07:09
quelle
1

technisch könnte es sein ...

%Vor%

Aber ich sehe keinen Grund, warum Sie das tun wollen. und wenn du wirklich willst, dass du albern wirst (und den Thread deines Browsers sperren):

%Vor%     
Dan Beam 27.01.2010 08:45
quelle
0

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 ..

    
InfantPro'Aravind' 13.01.2010 07:33
quelle
0

Nein, die Funktion ruft sich nicht selbst auf. Es wäre rekursiv, wenn sich die Funktion im Körper von move selbst nennt.

    
Szere Dyeri 13.01.2010 07:06
quelle

Tags und Links