ThemaEs gibt eine Frage, die wir beantworten müssen:
analysierenManche Leute sind möglicherweise verwirrt, wenn sie das Konzept „Fibonacci-Folge“ im Titel sehen, aber das ist nicht nötig! Bei dieser Frage können Sie dieses ungewohnte Konzept ignorieren. Wir müssen uns nur um das Zahlenmuster kümmern, das später angegeben wird. Wir sehen, dass die Regel in einem Satz zusammengefasst werden kann: Ab der dritten Ziffer ist der Wert jedes nachfolgenden Terms gleich der Summe der beiden vorhergehenden Terme. In einer Formel ausgedrückt lautet dies: an = an-1 + an-2 (n ≥ 2). Den Anforderungen des Themas entsprechend sind von uns eigentlich zwei Dinge gefragt:
BasislösungLösung:
Der Code wird wie folgt implementiert: /** * @description Erstellen Sie eine Methode zum Generieren eines Sequenz-Arrays. * @param {number} n gibt an, wie viele Elemente generiert werden sollen (d. h. die Array-Länge, nicht den Array-Index). */ Funktion erstelleFibArr(n) { //Deklarieren Sie ein Array zum Speichern von Daten let fibArr = []; // Beginnend mit dem dritten Element (Index 2) ist jedes Element gleich der Summe der beiden vorherigen Elemente for (let index = 0; index < n; index++) { Index < 2? fibArr.push(1) : fibArr.push(fibArr[Index - 1] + fibArr[Index - 2]); Konsole.log(fibArr[index]); } } //Methode createFibArr(10) aufrufen; analysieren: Dies dürfte die einfachste Methode zur Lösung des Problems sein und ist leicht umzusetzen. Aber wenn es sich um eine Interviewfrage handelt, kann man eine solche Antwort nur als mittelmäßig bezeichnen, ohne irgendwelche Highlights. Vor allem spiegelt sie nicht unser einzigartiges Temperament wider. Deshalb sollten wir andere Mittel nutzen, um unseren eigenen Stil zu verbessern! Grundlegende RekursionLösung:
Der Code wird wie folgt implementiert: /** * @description Berechnen Sie den Wert des n-ten Elements. * @param {number} n stellt den Indexwert jedes Elements dar. * @returns {number} der Wert der Position mit dem Index n. * / Funktion calFibValue(n) { console.count("Anzahl der Ausführungen:") gibt n < 2 zurück? 1: (calFibValue(n - 1) + calFibValue(n - 2)); } /** * @description Berechnungsergebnisse drucken* @param {number} n stellt die Anzahl der zu druckenden Elemente dar*/ Funktion printRes(n) { für (let index = 0; index < n; index++) { Konsole.log(calFibValue(index)); } } //Rufen Sie die Druckmethode auf printRes(10); // Ausführungszeiten: 276 analysieren: Der Einsatz von Rekursion verbessert zwar die Qualität des Codes, bringt aber auch ein anderes Problem mit sich: die Leistung. Der Wert jedes Artikels wird berechnet und akkumuliert, beginnend mit dem ersten Artikel. Der Prozess zur Berechnung des Wertes des vierten Artikels ist beispielsweise wie folgt:
Bei der Berechnung des Werts des fünften Elements muss das obige Verfahren verwendet werden, um den Wert des vierten Elements zu ermitteln, was eine große Anzahl wiederholter Vorgänge erfordert. Um beim Interviewer zu überzeugen, müssen wir aber dennoch weitere Optimierungen vornehmen! Rekursive OptimierungLösung:
Code-Implementierung: /** * @description Berechnen Sie den Wert des n-ten Elements. * @param {number} n stellt den Indexwert jedes Elements dar. * @returns {number} der Wert der Position mit dem Index n. * / // Eine Map-Struktur, die die Ergebnisse jeder Berechnung speichert // Hier kann auch ein Array verwendet werden, aber aus semantischer Sicht gibt es hier keine Map oder kein Objekt direkt let fibValueMap = new Map(); Funktion calFibValue(n) { console.count("Anzahl der Ausführungen: "); // Wenn der entsprechende Wert bereits im Cache vorhanden ist, direkt zurückgeben, if (fibValueMap.has(n)) { fibValueMap.get(n) zurückgeben; } konstanter Wert = n < 2 ? 1 : (calFibValue(n - 1) + calFibValue(n - 2)); // Nachdem jedes Element berechnet wurde, muss es rechtzeitig in der Karte gespeichert werden fibValueMap.set(n, Wert); Rückgabewert; } /** * @description Berechnungsergebnisse drucken* @param {number} n stellt die Anzahl der zu druckenden Elemente dar*/ Funktion printRes(n) { für (let index = 0; index < n; index++) { Konsole.log(calFibValue(index)); } } //Rufen Sie die Druckmethode auf printRes(10); // Ausführungszeiten: 26 analysieren: Laut der abgedruckten Zählung beträgt die Anzahl der Rekursionen nach der Optimierung etwa 1/10 der Anzahl vor der Optimierung, was ein überraschendes Ergebnis ist. Ich denke, der Interviewer wird dieses Mal zufrieden sein. ZusammenfassenEgal wie sich die Dinge ändern, das Wesentliche bleibt dasselbe. Solange Sie eine klare Vorstellung davon haben, wie das Problem gelöst werden kann, ist die Codeimplementierung nur ein Ergebnis. Bei unserer täglichen Arbeit und beim Lernen müssen wir bewusst unser divergentes Denken kultivieren und Probleme aus verschiedenen Blickwinkeln betrachten. Möglicherweise entdecken Sie unterschiedliche Szenarien! Ich hoffe, es kann für alle eine Inspiration sein! Es ist verständlich, dass wir in einem Vorstellungsgespräch einige scheinbar ausgefeilte Ideen verwenden, um unsere einzigartigen Qualitäten hervorzuheben oder wenn die Fragen im Vorstellungsgespräch spezifische Anforderungen stellen. In der täglichen Arbeit empfehle ich jedoch dennoch: Wenn die Leistung ähnlich ist und das Problem mit grundlegenden Methoden gelöst werden kann, verwenden Sie keine „fortgeschrittenen“ Methoden, da die Fehlerwahrscheinlichkeit bei grundlegenden Methoden viel geringer ist. Beispielsweise bietet für das heutige Problem die Basislösung tatsächlich die beste Leistung. Wenn wir weniger Fehlerberichte schreiben, haben wir mehr Zeit zum Faulenzen, oder? Dies ist das Ende dieses Artikels über die JavaScript-Ausgabe der Fibonacci-Folge. Weitere relevante Inhalte zur JS-Ausgabe der Fibonacci-Folge finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Implementierung der Docker-Bereitstellung von Django+Mysql+Redis+Gunicorn+Nginx
>>: Klassischer MySQL-High-Level-/Befehlszeilenvorgang (schnell) (empfohlen)
Da es im Internet nur wenige und unzureichende In...
Apache: Virtuellen Host basierend auf Port erstel...
Ein während des Entwicklungsprozesses häufig auft...
In diesem Artikel wird der spezifische Code für J...
Inhaltsverzeichnis Schriftarten mit font-face ric...
Tomcat CentOS-Installation Dieses Installationstu...
Wie unten dargestellt: XML/HTML-CodeInhalt in die...
Inhaltsverzeichnis Vorwort Beispiel Zusammenfassu...
Inhaltsverzeichnis 1. Indextyp 1. B+ Baum 2. Was ...
Schritt 1: Holen Sie sich die MySQL YUM-Quelle Ge...
Inhaltsverzeichnis Informationen zu WITH-Abfragen...
Erkennen Sie die Unterschiede zwischen den Method...
Inhaltsverzeichnis 1. Datenbank-Engpass 2. Unterb...
Vorwort Einige der früheren Codes auf Github erfo...
In diesem Artikel müssen wir lernen, wie man Bild...