suchen
HeimWeb-Frontendjs-TutorialVerständnis der Rekursion mit JavaScript

Verständnis der Rekursion mit JavaScript

Einige Probleme eignen sich besser für die Rekursion. Beispielsweise hat eine Sequenz wie eine Fibonacci -Sequenz eine rekursive Definition. Jede Zahl in der Sequenz ist die Summe der ersten beiden Zahlen in der Sequenz. Probleme, die mit Baumdatenstrukturen gebaut oder durchquert werden müssen, können ebenfalls durch Rekursion gelöst werden. Wenn Sie sich rekursiv denken, können Sie leistungsstarke Fähigkeiten vermitteln, um solche Probleme zu lösen.

In diesem Tutorial werde ich Schritt für Schritt erläutern, wie mehrere rekursive Funktionen funktionieren, und Ihnen einige Techniken zeigen, um rekursive Funktionen systematisch zu definieren.

Inhalt:

  • Was ist Rekursion?
  • Digitale Rekursion
  • Listenrekursion
  • Erstellen Sie eine Liste
  • Schwanzrekursion
  • Zusammenfassen

Was ist Rekursion?

Rekursiv definierte Funktionen sind Funktionen, die durch ihre vereinfachten Versionen selbst definiert sind. Hier ist ein vereinfachtes Beispiel:

 Funktion doa (n) {
    // ...
    if (n> 0) {
        DOA (N-1);
    }
}

Um konzeptionell zu verstehen, wie die Rekursion funktioniert, werden wir uns ein Beispiel ansehen, das codesunabhängig ist. Angenommen, Sie sind für die Beantwortung von Anrufen des Unternehmens verantwortlich. Da dies ein geschäftiges Unternehmen ist, Ihr Telefon verfügt über mehrere Telefonleitungen, können Sie gleichzeitig mehrere Telefonanrufe bearbeiten. Jede Telefonlinie hat eine Taste am Mobilteil, die beim Eintreffen auf dem Weg blinkt. Wenn Sie heute zur Arbeit gehen und das Telefon einschalten, blinken gleichzeitig vier Zeilen. Sie beantworten also alle Anrufe.

Sie nehmen die erste Zeile ab und sagen ihnen: "Bitte warten Sie." Als nächstes holen Sie die dritte Zeile ab und setzen sie in den Standby -Unternehmen und so weiter. Wenn Sie jeden Anruf beenden, kehren Sie zum vorherigen Anrufer zurück, vervollständigen Sie diesen Anruf und legen auf.

Jeder Aufruf in diesem Beispiel ähnelt einem rekursiven Aufruf in einer Funktion. Wenn Sie einen Anruf erhalten, wird er in den Anrufstapel (im Code) eingelegt. Wenn Sie einen Anruf nicht sofort ausfüllen können, setzen Sie ihn in Standby -Unternehmen. Wenn Ihr Funktionsaufruf nicht sofort berechnet werden kann, bleibt er im Anrufstapel. Wenn Sie den Anruf beantworten können, wird er abgeholt. Wenn Ihr Code Funktionsaufrufe berechnen kann, wird er aus dem Stapel herausgekommen. Denken Sie an diese Metapher, wenn Sie sich das folgende Code -Beispiel ansehen.

Digitale Rekursion

Alle rekursiven Funktionen erfordern einen Grundfall, damit sie beenden können. Wenn Sie jedoch nur einen Basisfall zu unserer Funktion hinzufügen, wird dies nicht unendlich verhindern. Die Funktion muss einen Schritt haben, um uns der Grundsituation näher zu bringen. Dies ist der rekursive Schritt. Im rekursiven Schritt wird das Problem auf eine kleinere Version des Problems reduziert.

Angenommen, Sie haben eine Funktion, die alle Zahlen ab n multipliziert. Dies wird als faktorielle Funktion bezeichnet, wir schreiben sie als 4!, Wenn n gleich 1 ist.

In jedem Schritt subtrahieren Sie 1 von der aktuellen Zahl. Was ist die rekursive Situation? Der rekursive Fall ist die Funktionstatsache (4).

  1. Ist 4 gleich 1? NEIN. Fakten Sie (3).
  2. Ist 3 gleich 1? NEIN. Setzen Sie Tatsache (2).
  3. Ist 2 gleich 1? NEIN. Setzen Sie Fakt (1).
  4. Ist 1 gleich 1? Ja. Gibt Fakt (2) zurück und gibt 2 zurück.
  5. Holen Sie sich 3 * Tatsache (2) ist Fakt (4) und kehrt 24 zurück.

Hier ist eine andere Möglichkeit, um zu sehen, wie die Funktion jeden Anruf umgeht:

 <code>fact(4) 4 * fact(3) 4 * ( 3 * fact(2) ) 4 * ( 3 * ( 2 * fact(1) )) 4 * ( 3 * ( 2 * 1 ) ) 4 * ( 3 * 2 ) 4 * 6 24</code>

In rekursiven Fällen sollten sich die Parameter ändern und Sie dem Grundfall näher bringen. Dieser Parameter sollte in Basisfällen getestet werden. Im vorherigen Beispiel, da wir 1 im rekursiven Fall subtrahieren, testen wir im Grundfall, ob der Parameter gleich 0 ist.

Herausforderung

  1. Implementieren Sie die Summenfunktion mit Schleifen anstelle von rekursiv.
  2. Erstellen Sie eine Funktion, die sich rekursiv zwei Zahlen multipliziert. Zum Beispiel 0;
  3. Vereinfacht die Filterfunktion so, dass alle Elemente aus der Liste entfernt werden. Zum Beispiel ["A", "B", "D"].

Schwanzrekursion

Die Schwanzrekursion ist eine Rekursionsform, mit der der Compiler die Tail -Call -Optimierung (TCO) durchführen kann, um viele Leistungsfehler der normalen Rekursion zu verhindern. Zusätzlich löst die Schwanzrekursion das Problem der maximalen Funktionsabwehrtiefe. Sie müssen die Funktion jedoch irgendwie schreiben, damit sie funktioniert.

Die Schwanzrekursion eignet sich für Funktionen, die rekursive Funktionen am Ende einer Funktion aufrufen. Hier ist beispielsweise die schwanzrekursive Version der Summe () -Funktion: Der gesamte Rückgabewert von sum () ist der gesamte Rückgabewert, sodass die Laufzeit die externe Funktion sicher verwerfen und nur die Ergebnisse der internen Funktion zurückgeben kann. Viele Menschen werden jedoch über so etwas stolpern:

 Funktion nottailrecursive (n) {
    // ...
    Return Nottailrecursive (N) 1
}

Sie denken vielleicht, dass dies die Schwanzrekursion verwendet, da die rekursive Funktion am Ende aufgerufen wird. Aber es tut es nicht. Dies liegt daran, dass JavaScript zu einer externen Funktion zurückkehren muss, um 1 hinzuzufügen.你可以重写它的方法之一是将1传递到参数中,这样内部函数就可以进行该计算。

Nicht alle Browser unterstützen derzeit die Tail -Call -Optimierung, aber sie befinden sich im ES -Standard, sodass wir in Zukunft möglicherweise mehr Unterstützung dafür sehen. Darüber hinaus ist es normalerweise eine gute Praxis, da es normalerweise Änderungen an Funktionsparametern isoliert.

Herausforderung

Rekonstruieren Sie in diesem Artikel eine rekursive Funktion in einer schwanzrekursiven Funktion.

Zusammenfassen

Es gibt drei Teile für rekursive Funktionen. Die erste ist die grundlegende Situation, die die Kündigungsbedingung ist. Der zweite ist der Schritt, der uns der Grundsituation näher bringt. Der dritte ist der rekursive Schritt, bei dem sich die Funktion mit vereinfachten Eingaben aufruft.

Rekursion ist wie Iteration. Jede Funktion, die Sie rekursiv oder eine Schleife verwenden können. Andere Dinge, die bei der Verwendung von Rekursion zu berücksichtigen sind, sind rekursive verschachtelte Listen und optimierte rekursive Anrufe.

Sie können die rekursive Funktion in eine rekursive Schwanzfunktion neu umsetzen, die Leistungsvorteile erzielen kann.

Eine gute Ressource, um die Rekursion weiter zu lernen, ist das Buch The Little Schemer. Es verwendet ein Q & A -Format, um Ihnen beizubringen, wie Sie rekursiv denken.

Dieser Beitrag wurde mit den Beiträgen von Jacob Jackson aktualisiert. Jacob ist ein Webentwickler, Tech -Autor, Freiberufler und Open -Source -Mitarbeiter.

Das obige ist der detaillierte Inhalt vonVerständnis der Rekursion mit JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
C und JavaScript: Die Verbindung erklärteC und JavaScript: Die Verbindung erklärteApr 23, 2025 am 12:07 AM

C und JavaScript erreichen die Interoperabilität durch WebAssembly. 1) C -Code wird in das WebAssembly -Modul zusammengestellt und in die JavaScript -Umgebung eingeführt, um die Rechenleistung zu verbessern. 2) In der Spieleentwicklung kümmert sich C über Physik -Engines und Grafikwiedergabe, und JavaScript ist für die Spiellogik und die Benutzeroberfläche verantwortlich.

Von Websites zu Apps: Die verschiedenen Anwendungen von JavaScriptVon Websites zu Apps: Die verschiedenen Anwendungen von JavaScriptApr 22, 2025 am 12:02 AM

JavaScript wird in Websites, mobilen Anwendungen, Desktop-Anwendungen und serverseitigen Programmierungen häufig verwendet. 1) In der Website -Entwicklung betreibt JavaScript DOM zusammen mit HTML und CSS, um dynamische Effekte zu erzielen und Frameworks wie JQuery und React zu unterstützen. 2) Durch reaktnatives und ionisches JavaScript wird ein plattformübergreifendes mobile Anwendungen entwickelt. 3) Mit dem Elektronenframework können JavaScript Desktop -Anwendungen erstellen. 4) Node.js ermöglicht es JavaScript, auf der Serverseite auszuführen und unterstützt hohe gleichzeitige Anforderungen.

Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichenPython gegen JavaScript: Anwendungsfälle und Anwendungen verglichenApr 21, 2025 am 12:01 AM

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

Die Rolle von C/C bei JavaScript -Dolmetschern und CompilernDie Rolle von C/C bei JavaScript -Dolmetschern und CompilernApr 20, 2025 am 12:01 AM

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

JavaScript in Aktion: Beispiele und Projekte in realer WeltJavaScript in Aktion: Beispiele und Projekte in realer WeltApr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

JavaScript und das Web: Kernfunktionalität und AnwendungsfälleJavaScript und das Web: Kernfunktionalität und AnwendungsfälleApr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Verständnis der JavaScript -Engine: ImplementierungsdetailsVerständnis der JavaScript -Engine: ImplementierungsdetailsApr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitPython vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitApr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version