Was ist ein rekursiger Anruf?
In der Programmierung ist ein rekursiger Anruf ein Befehl in einer Unterprogramme oder Funktion, die dem Programm erneut aufweist, dasselbe Subroutine erneut auszuführen. Die Wiederholungsleistung kann das direkte Ergebnis der Funktion sein, oder es kann eine zweite Funktion ausgelöst werden, die sich wiederum auf die erste Funktion bezieht. Ein rekursiver Anruf hat einige Ähnlichkeiten mit der gefürchteten unendlichen Schleife, aber die Unterroutine hat immer eine bedingte Aussage, die dem Programm mitteilt, wann die Wiederholung der Rekursion aufhören soll.
Das Konzept der Rekursion wird vielleicht am besten durch die Verwendung eines Beispiels veranschaulicht. Angenommen, ein Dachdecker wendet neue Schindeln auf ein Haus auf. Zunächst muss er ein Bündel Schindeln auf das Dach tragen. Sobald er das erste Bündel einnagelt hat, muss er die Leiter hinunterklettern, ein weiteres Bündel zurückholen und festnageln. Der Prozess setzt sich als eine Reihe von "Go, Fetch, Return" fort, bis das letzte Schindel angewendet wurde. Zu diesem Zeitpunkt kann der Dachdecker zum nächsten Job übergehen oder nach Hause gehen.
Obwohl das Beispiel iS Eine übermäßige Vereinfachung enthält alle Elemente eines rekursiven Anrufs. Es gibt einen Ausgangspunkt, der Dachdecker muss abrufen, was er braucht, zum Anfang zurückkehren und, wenn der endgültige Zustand erfüllt ist, anhalten. Dies ist im Grunde das, was das Programm tut. Es beginnt, implementiert eine Aktion, kehrt zu sich selbst zurück und endet, wenn der Endzustand auftritt.
Die Endbedingung wird als Basisfall bezeichnet. Es ist für alle rekursiven Anrufe unerlässlich; Ohne sie würde sich die Funktion weiterhin wiederholen. Dies führt im besten Fall dazu, die Speicherressourcen des Systems zu entleeren. Normalerweise wird die Überlastung das Programm irgendwann zum Absturz bringen, aber wenn das Problem entdeckt wird, kann ein erheblicher Schaden angerichtet werden.
erfahrene Programmierer erkennen möglicherweise die Ähnlichkeit zwischen einem rekursiven Aufruf und einem "für" oder "while". Wenn zum Beispiel das Ziel ist, die Gesamtbestandszahl aller Aktien mit Teil N zu findenUmbers mehr als 999, eine "für" -Sloop, teilt dem Programm mit, dass er alle qualifizierenden Instanzen und eine "while" -Schloop aufweist, dass er die Schleife nur ausführen soll, während die angegebene Bedingung gültig ist. Es könnte gesagt werden, dass ein rekursiver Anruf einige der Merkmale dieser Schleifen mit einer "if-then-else" -Schürtung kombinieren; Wenn diese Bedingung wahr ist, dann tun Sie dies oder tun Sie etwas anderes, wenn die Bedingung falsch ist. Rekursion ermöglicht jedoch typischerweise mehr kompakten Code und ermöglicht es, dass das Problem an die Funktion übergeben wird, an der es benötigt wird.