English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial werden Sie die Java-Rekursionsfunktion und ihre Vor- und Nachteile kennenlernen.
In Java, das Selbe aufrufenMethodeGekennzeichnet als rekursiver Methodenname. Und dieser Prozess wird als Rekursion bezeichnet.
Ein Beispiel aus der physischen Welt ist das Platzieren von zwei parallelen Spiegeln, die sich gegenüberstehen. Jedes Objekt zwischen ihnen wird rekursiv reflektiert.
Im obigen Beispiel haben wir die Methode recurse() aus dem main-Methode intern aufgerufen. (Normaler Methodenaufruf). Und innerhalb der Methode recurse() rufen wir den gleichen recurse-Methode erneut auf. Dies ist eine Rekursion.
Um die Rekursion zu beenden, müssen wir einige Bedingungen innerhalb der Methode bereitstellen. Andernfalls wird diese Methode unendlich aufgerufen.
Daher verwenden wirif ... else-Anweisung(oder ähnliche Methode)Beenden Sie die Rekursion innerhalb der Methode.
class Factorial { static int factorial(int n) { if (n != 0) // Abbruchbedingung return n * factorial(n-1); //Rekursion aufrufen else return 1; } public static void main(String[] args) { int number = 4, result; result = factorial(number); System.out.println(number + "Fakultät von = " + result); } }
Ausgabe:
4 Fakultät von = 24
Im obigen Beispiel haben wir eine Methode namens factorial(). Sie wird von der main() Methode aufgerufen. Mit dem übergebenen numerischen Variablen als Parameter.
Hier beachten Sie die folgenden Anweisungen:
return n * factorial(n-1);
Die factorial() Methode ruft sich selbst auf. Zunächst ist der Wert von n im factorial() intern4. Während des nächsten rekursiven Aufrufs wird3. Dieser Prozess setzt sich fort, bis n gleich 0 ist.
Wenn n gleich 0 ist, gibt das if-Statement false zurück und kehrt daher zurück1. Schließlich wird das akkumulierte Ergebnis an die main() Methode übergeben.
Das folgende Diagramm wird Ihnen helfen, besser zu verstehen, wie Sie das Fakultät-Programm mit Rekursion ausführen.
Bei einer rekursiven Aufruf wird ein neuer Speicherort für die Variablen auf dem Stack zugewiesen. Mit jedem Rückruf einer rekursiven Aufruf werden alte Variablen und Parameter aus dem Stack gelöscht. Daher verwendet rekursives Oft mehr Speicher und ist in der Regel langsamer.
Andererseits ist die rekursive Lösung einfacher und erfordert weniger Zeit für die Schreibweise, das Debugging und die Wartung.