Ich bin neu auf dieser Seite und diese Frage ist sicherlich nicht auf Forschungsniveau - aber na ja. Ich habe einen kleinen Hintergrund in Software-Engineering und fast keinen in CSTheory, aber ich finde es attraktiv. Um es kurz zu machen, ich möchte eine detailliertere Antwort auf Folgendes, wenn diese Frage auf dieser Website akzeptabel ist.
Ich weiß also, dass jedes rekursive Programm ein iteratives Analogon hat, und ich verstehe die beliebte Erklärung, die dafür angeboten wird, indem ich etwas Ähnliches wie den "Systemstapel" behalte und Umgebungseinstellungen wie die Absenderadresse usw. drücke. Ich finde diese Art von Handwellen .
Da ich etwas konkreter bin, möchte ich (formal) sehen, wie man diese Aussage in Fällen beweist, in denen Sie eine Funktion haben, die die Kette . Außerdem was ist, wenn es einige bedingten Anweisungen , die einen führen könnten einen Anruf zu einem gewissen machen ? Das heißt, der potenzielle Funktionsaufrufgraph enthält einige stark verbundene Komponenten.F i F j
Ich würde gerne wissen, wie mit diesen Situationen umgegangen werden kann, indem wir einige rekursive zu iterativen Konverter sagen. Und ist die Handwellenbeschreibung, auf die ich mich zuvor bezogen habe, wirklich genug für dieses Problem? Ich meine, warum finde ich es dann in einigen Fällen einfach, die Rekursion zu entfernen? Insbesondere das Entfernen der Rekursion aus der Vorbestellungsdurchquerung eines Binärbaums ist wirklich einfach - es ist eine Standard-Interviewfrage, aber das Entfernen der Rekursion im Falle einer Nachbestellung war für mich immer ein Albtraum.
Was ich wirklich stelle, sind Fragen
(1) Gibt es wirklich einen formelleren (überzeugenden?) Beweis dafür, dass Rekursion in Iteration umgewandelt werden kann?
(2) Wenn diese Theorie wirklich da draußen ist, warum finde ich es dann beispielsweise einfacher , die Vorbestellung einfacher und die Nachbestellung so schwer zu iterieren? (außer meiner begrenzten Intelligenz)