Andreas Klatt: Frage zum Ablauf einer rekursiven Funktion

Beitrag lesen

Moin,

ich habe eine rekursive Funktion, die mir eine Ausgabe beschert, die mit Sicherheit seine Richtigkeit hat, die ich aber nicht verstehe.
Hauptsächlich geht es darum, was mit Programmcode passiert, der hinter dem Funktionsaufruf innerhalb der Funktion steht. Wann wird der mit welchen Werten ausgeführt?
Um mir das Problem zu verdeutlichen, habe ich eine kleine Funktion geschrieben, die mit <body onLoad=welcome(4)> aufgerufen wird:

function welcome(i)
  {
   if(i == 0)
   {
   }
   else
   {
    document.write("Willkommen A " + i + "<br>");
    i--;
    welcome(i);
    document.write("Willkommen B " + i + "<br>");
   }
  }

Als Ausgabe erhalte ich:
Willkommen A 4
Willkommen A 3
Willkommen A 2
Willkommen A 1
Willkommen B 0
Willkommen B 1
Willkommen B 2
Willkommen B 3

Die ersten vier Zeilen verstehe ich.
Aber warum wird danach mit i=0 "Willkommen B 0" ausgegeben, wo doch bei i == 0 gar nicht in die else-Schleife gesprungen werden soll. Und: Warum wird danach die Zeile mehrmals ausgegeben?
Ich kann mir das nur so erklären, dass das Programm alle Werte auf einen FIFO-Stack zwischenspeichert und auf die folgenden Zeilen loslässt, sobald der rekursive Programmaufruf sein Ende gefunden hat. Aber müsste i nicht wieder mit 3 beginnen (da, wo es aufgehört hatte)?, also:

Willkommen A 4
Willkommen A 3
Willkommen A 2
Willkommen A 1
Willkommen B 3
Willkommen B 2
Willkommen B 1
(Willkommen B 0)?

Vielen Dank für jeden Hinweis,
Gruß

Andreas Klatt.