schnullerbacke hat geschrieben:Von der Logik her führt er die erste Rekursion solange aus, bis diese abbricht. Erst dann würde der zweite Aufruf rekursiv ausgeführt. Das sieht also nicht nur "abenteuerlich" aus, das macht auch irgendwie nicht wirklich Sinn.
Wie schon oft erwähnt: Ja, es macht so keinen Sinn. Dies ist NICHT die Original-Funktion, bei der der Bug aufgetreten ist..
Das bedeutet Rekursion1 ist gestorben bevor Rekursion2 startet, der Ergebnispointer ist also weg.
Ja, das ist aber auch so, wenn du die Rekursion durch beliebige andere Funktionen ersetzt. Etwa sin(n) und cos(n). Bevor die eine aufgerufen wird ist die andere natürlich fertig - vielleicht wird das mit den Multicore-CPUs einmal anders, in der sin(n) und cos(n) parallel gerechnet werden könnten. In einer Single-Thread-Anwendung gilt dein Satz aber für alle Funktionen und nicht unbedingt nur für die Rekursion.
Ich würde das eher für einen Fehler halten wenn es geht.
Es gibt definitiv Anwendungsfälle. An einem arbeite ich gerade. Simples Beispiel: Mathematische Funktionen/Terme können beliebig verschachtelt auftreten: (((sin(x^2))))+(((sin(x^2)))) hier kannst du beliebig viele Klammern noch hinzufügen - die mathematische Funktion ist trotzdem korrekt und ein Parser muss diesen Umstand auflösen können. Dies kann nur über Rekursion geschehen, da die beiden Summanden beliebig aussehen können, beliebig verschachtelt sein können und nicht unbedingt gleich sein müssen.