Ich schreibe einen bestehenden Code in einer Umgebung um, in der rekursive Aufrufe weder einfach implementiert noch gewünscht sind. (Und in Fortran 77, falls Sie es wissen müssen.) Ich habe darüber nachgedacht, einen Stack von Grund auf neu zu erstellen, um die benötigten Aufrufe im Auge zu behalten, aber das scheint umständlich zu sein, und ich würde lieber keinen Speicher für ein Array in Fällen zuweisen, in denen die Rekursion nicht tief ist. (Ich bin nicht zuversichtlich, dass Fortran 77 auch dynamische Array-Größe unterstützt.)
Irgendwelche anderen Vorschläge für eine allgemeine Lösung, wie man eine offensichtlich rekursive Funktion nimmt und sie nicht-rekursiv umschreibt, ohne Platz auf einem Stapel zu verschwenden?
Vielen Dank! Alter McSt
2 Stimmen
Wenn sie nicht verzweigt, können Sie sie normalerweise in eine einfache Schleife umschreiben. Wenn sie verzweigt, brauchen Sie normalerweise einen Stapel
1 Stimmen
@CodeInChaos: Eine rekursive Funktion, die nicht verzweigt, wird per Definition niemals zurückkehren...
0 Stimmen
Ich glaube, ich habe das Wort Verzweigung falsch verwendet. Ich meine damit, dass er sich selbst mehrfach aufruft, so dass der Graph der Aufrufe zu einem Baum mit Verzweigungen wird. Und es ist nur meine Erfahrung und nicht immer wahr.