Hi,
function welcome(i)
{
if(i == 0)
{
}
else
{
document.write("Willkommen A " + i + "<br>");
i--;
welcome(i);
document.write("Willkommen B " + i + "<br>");
}
}
ich versuche es mal, kann aber für nichts garantieren.
Also bei rekusiven Funktionen werden alle Daten auf einem STack abgelegt und wenn die Abbruchbedingung kommt rückwärts aufgerechnet.
An Deinem Beispiel:
i=4 (>0) Also druckt er A4 -> ruft sich selbst mit 3 auf
i=3 (>0) Also druckt er A3 -> ruft sich selbst mit 2 auf
i=2 (>0) Also druckt er A2 -> ruft sich selbst mit 1 auf
i=1 (>0) Also druckt er A1 -> ruft sich selbst mit 0 auf
i=0 (0=0) also bricht er ab und rechnet rückwärts den unteren Teil der Funktion auf
d.h i is schon in der if-Anweisung 0 und wird gar nicht noch mal geprüft, da ja dass i--- vor dem Funktionsaufruf kommt
er sprint also zurück wo i=0 war gibt B0 aus
und geht wieder eins zurück, dort war i=1 -> B1
wieder eins zurück ...
bis B3
Du musst versuchen DIr vorzustellen, dass mit jedem Funktionsaufruf ein Teller auf einen Stapel gelegt wird, dieser Teller beinhaltet alle Daten, die bis dahin angefallen sind...folgt die Abbruchbedingung, werden alle Teller nacheinander wieder runtergenommen und leergegessen. ;)
Teller1: i=4 i in der Funktion =3 (da i--)
Teller2: i=3 i in der Funktion =2(da i--)
Teller3: i=2 i in der Funktion =1(da i--)
Teller4: i=1 i in der Funktion =0(da i--)
Teller5: i=0, Abbruch erfolgt, da Bedingung nicht mehr erfüllt ist, es wird keine neue Funktion mehr aufgerufen
Teller5: ist also weg, wegen der Abbruchbedingung
Teller4: i hat intern den Wert 0, ausführen des Restes der Funktion
Teller3: i hat intern den Wert 1, ausführen des Restes der Funktion
Teller2 i hat intern den Wert 2 ausführen des Restes der Funktion
Teller1 i hat intern den Wert 3 ausführen des Restes der Funktion
letzter Teller weg, Ausgabe
ich hoffe es war ein wenig verständlich?
ciao
romy
DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A(+fo%3A|+ch%3A%3F+rl%3A(+br%3A%26+va%3A|+zu%3A)+ss%3A|+ls%3A[