Wobei für mich hier ersichtlich ist, wo die Rekursion ist, auch wenn durch die Generierung von threads eine Nebenläufigkeit erzeugt ist, die bewirken kann, dass z.B. a[n] vor a[n+1] beendet wird, was evtl. verwirrt.
Nicht kann sondern wird. Der timeout Aufruf erfolgt immer nachdem Funktion a() fertig ist, da es wie ich schon erwähnte keine Parallele Abarbeitung in JS erfolgt und selbst wenn, wäre es kein Rekursiveraufruf, den Unterschied habe ich dir ja gezeigt und erklärt. Bei einem Rekursiven Aufruf werden die Variabeln auf den Stack gelegt und sind stehen dem Aufruf wieder zu Verfügung, das ist ein wichtiger Aspekt, der bei deiner These nicht erfüllt ist.
Trotzdem steht innerhalb der Funktion a() eine Anweisung, die das erneute Aufrufen der Funktion a() verursacht (indirekter Selbstaufruf ...). Das ist für mich Rekursion, erzeugt wird eine Kette.
Nein, wo wird eine Kette erzeugt?
Das Beispiel von mir demonstriert doch einwandfrei das es eben keine Kette erzeugt.
Struppi.