JavaScript Rekursive Funktion
Zusammenfassung: In diesem Tutorial erfahren Sie, wie Sie mit der Rekursionstechnik eine JavaScript rekursive Funktion entwickeln, die sich selbst aufruft.
Einführung in die rekursiven JavaScript-Funktionen
Eine rekursive Funktion ist eine Funktion, die sich selbst aufruft, bis sie es nicht tut. Und diese Technik wird Rekursion genannt.
Angenommen, Sie haben eine Funktion namens recurse()
. Die recurse()
ist eine rekursive Funktion, wenn sie sich innerhalb ihres Körpers wie folgt aufruft:
Code language: JavaScript (javascript)function recurse() { // ... recurse(); // ...}
Eine rekursive Funktion hat immer eine Bedingung, um den Aufruf zu beenden, andernfalls wird sie sich unbegrenzt aufrufen. Eine rekursive Funktion sieht also normalerweise wie folgt aus:
Code language: JavaScript (javascript)function recurse() { if(condition) { // stop calling itself //... } else { recurse(); }}
Im Allgemeinen werden rekursive Funktionen verwendet, um ein großes Problem in kleinere zu zerlegen. Sie können feststellen, dass sie in den Datenstrukturen wie binären Bäumen und Graphen und Algorithmen wie binäre Suche und Quicksort stark verwendet werden.
Beispiele für rekursive JavaScript-Funktionen
Nehmen wir einige Beispiele für die Verwendung der rekursiven Funktionen.
1) Ein einfaches rekursives JavaScript-Funktionsbeispiel
Angenommen, Sie müssen eine Funktion entwickeln, die von einer bestimmten Zahl auf 1 herunterzählt. Zum Beispiel, um von 10 auf 1 herunterzuzählen:
321
Das Folgende zeigt die countDown()
Funktion:
Code language: JavaScript (javascript)function countDown(fromNumber) { console.log(fromNumber);}countDown(3);
Diese countDown(3)
zeigt nur die Zahl 3.
Um von der Zahl 3 auf 1 herunterzuzählen, können Sie:
- die Zahl 3 anzeigen.
- und rufen Sie die
countDown(2)
auf, die die Nummer 2 anzeigt. - und rufen Sie die
countDown(1)
auf, die die Nummer 1 anzeigt.
Das Folgende ändert die countDown()
in eine rekursive Funktion:
Diese countDown(3)
wird so lange ausgeführt, bis die Größe des Aufrufstapels überschritten wird:
Code language: JavaScript (javascript)Uncaught RangeError: Maximum call stack size exceeded.
… weil es nicht die Bedingung hat, sich nicht mehr selbst aufzurufen.
Der Countdown stoppt, wenn die nächste Zahl Null ist, daher fügen wir eine if-Bedingung wie folgt hinzu:
Ausgabe:
321
Das countDown()
scheint wie erwartet zu funktionieren.
Wie im Tutorial zum Funktionstyp erwähnt, ist der Name der Funktion jedoch ein Verweis auf das eigentliche Funktionsobjekt.
Wenn irgendwo im Code der Funktionsname auf null gesetzt ist, funktioniert die rekursive Funktion nicht mehr.
Der folgende Code führt beispielsweise zu einem Fehler:
Code language: JavaScript (javascript)let newYearCountDown = countDown;// somewhere in the codecountDown = null;// the following function call will cause an errornewYearCountDown(10);
Fehler:
Code language: JavaScript (javascript)Uncaught TypeError: countDown is not a function
Funktionsweise des Skripts:
- Weisen Sie der Variablen
newYearCountDown
zunächst dencountDown
Funktionsnamen zu. - Zweitens setzen Sie die
countDown
Funktionsreferenz aufnull
. - Rufen Sie drittens die Funktion
newYearCountDown
auf.
Der Code verursacht einen Fehler, da der Hauptteil der countDown()
Funktion auf den countDown
Funktionsnamen verweist, der zum Zeitpunkt des Aufrufs der Funktion auf null
gesetzt wurde.
Um das Problem zu beheben, können Sie einen benannten Funktionsausdruck wie folgt verwenden:
2) Berechnen Sie die Summe der Ziffern einer Zahl Beispiel
Berechnen Sie bei einer Zahl, z. B. 324, die Summe der Ziffern 3 + 2 + 4 = 9.
Um die rekursive Technik anzuwenden, können Sie die folgenden Schritte ausführen:
f(324) = 4 + f(32)f(32) = 2 + f(3)f(3) = 3 + 0 (stop here)
Also
f(324) = 4 + f(32) f(324) = 4 + 2 + f(3) f(324) = 4 + 2 + 3
Das Folgende veranschaulicht die sumOfDigits()
rekursive Funktion:
Wie es funktioniert:
Zusammenfassung
- Eine rekursive Funktion ist eine Funktion, die sich selbst aufruft, bis sie es nicht tut
- Eine rekursive Funktion hat immer eine Bedingung, die verhindert, dass sich die Funktion selbst aufruft.
- War dieses Tutorial hilfreich ?
- JaNein