2017-05-16 2 views
1

Ich möchte wissen, wie die Rekursion in Javascript funktioniert. Ich nehme ein Beispiel unten:Rekursion auf Javascript

function abc(n){ 
    document.write(n + "<br>"); 
    if (n < 4){ 
     abc(n+1); 
     document.write(n + "<br>"); 
    } 
} 

Meine Aufmerksamkeit ist in der 5. Zeile. Wann wird der 5. ausgeführt? Wird die 5. Zeile vor oder nach der Rekursion ausgeführt?

Danke.

+0

http://stackoverflow.com/questions/10638059/javascript-debugging-line-by-line-using-google-chrome – Quentin

+0

Nach Rekursion wird es zweiten 'document.write' aufrufen. – Shubham

+0

Der Schreibbefehl befindet sich nach dem rekursiven Funktionsaufruf, daher wird die Ausführung nach dem rekursiven Aufruf stattfinden ;-) – Eineki

Antwort

3

Es wird nach der Rekursion

function abc(n){ 
 
    document.write(n + "<br>"); 
 
    if (n < 4){ 
 
     abc(n+1); 
 
     document.write(n + " Foo<br>"); 
 
    } 
 
} 
 

 
abc(1)

+0

@Rushit Die Prüfung für 4 ist erfolgt, nachdem 4 das erste Mal gedruckt wurde ... – kennasoft

+0

Wird es nach ALL-Rekursion oder nach der ersten Rekursion ausgeführt? – billyhalim25

+0

@ billyhalim25 Sie können das Code-Snippet ausführen. Sie werden sehen, dass es alle Iterationen von 1 bis 4 anzeigt. Dann werden die Zahlen mit 'foo' angezeigt. – Weedoze

2

Es aber die erste fertige Rekursion ausgeführt wird, ausgeführt werden. Es folgt dem Depth-first search Prinzip.

levels     comment 
------------- ---------------------------------- 
1 
    2 
     3 
      4 end of recursion calls, max depth 
     3 
    2 
1 

function abc(n){ 
 
    document.write(n + "<br>"); 
 
    if (n < 4){ 
 
     abc(n+1); 
 
     document.write(n + "<br>"); 
 
    } 
 
} 
 

 
abc(0);

1

Es wird nach Rekursion ausgeführt werden. Rekursion ruft Funktionen in Funktionen auf, bis Bedingungen erfüllt sind. In Ihrem Fall sollte die Variable n kleiner als 4 sein, damit die Rekursion in die "tiefere" Ebene der Funktion übergeht.

abc (1) -> abc (2) -> abc (3)

So werden Sie 3 synchrone Funktionsaufrufe haben, bevor Programm zu anderen Linien gehen.