Heim Web-Frontend js-Tutorial 循环 vs 递归浅谈_javascript技巧

循环 vs 递归浅谈_javascript技巧

May 16, 2016 pm 05:41 PM
循环 递归

比如遍历以下一维数组:

复制代码 代码如下:

[javascript] view plaincopyprint?
var a1 = [1]; 
var a2 = [1, 2]; 
var a3 = [1, 2, 3]; 

虽然它们长度不一,但循环应付它们非常容易,也很优雅:

复制代码 代码如下:

[javascript] view plaincopyprint?
var dumpArrayByLoop = function(a) { 
    for (var i = 0; i         println(a[i]); 
    } 
}; 

如果改用递归,则看起来比较别扭:

复制代码 代码如下:

[javascript] view plaincopyprint?
var dumpArrayByRecur = function(i, a) { 
    if (i         println(a[i]); 
        dumpArrayByRecur(i + 1, a); 
    } 
}; 

它们能输出同样的结果,但相比之下递归版本看起来很笨拙。

现在想想,如果元数据变化了:维度扩大到二维。

复制代码 代码如下:

[javascript] view plaincopyprint?
var a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; 

此时需要再外面再套一层循环变成双重循环:

复制代码 代码如下:

[javascript] view plaincopyprint?
var dumpArrayByLoop = function(a) { 
    for (var i = 0; i         for (var j = 0; j             println(a[i][j]); 
        } 
    } 
}; 

如果数据的维度再继续扩大,变成三维、四维……甚至动态的N维数组。使用循环该怎么处理呢?

在这种“层数”很深,甚至不确定的情况下,就需要用“递归”来解决跨“层”的问题。

复制代码 代码如下:

[javascript] view plaincopyprint?
var isArray = function(a) { 
    return Object.prototype.toString.call(a) === '[object Array]'; 
}; 

var dumpArrayByRecur = function(a) { 
    if (isArray(a)) { 
        for (var i = 0; i             dumpArray(a[i]); 
        } 
    } else { 
        println(a); 
    } 
}; 

上面的代码中,如果发现子节点是一个数组,就使用递归进入下一层;而同一层上的遍历则使用循环来完成。

Erklärung dieser Website
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

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Apr 23, 2024 am 09:30 AM

Die Rekursionstiefe von C++-Funktionen ist begrenzt und das Überschreiten dieser Grenze führt zu einem Stapelüberlauffehler. Der Grenzwert variiert je nach System und Compiler, liegt aber meist zwischen 1.000 und 10.000. Zu den Lösungen gehören: 1. Tail-Rekursionsoptimierung; 2. Tail-Call;

Unterstützen C++-Lambda-Ausdrücke die Rekursion? Unterstützen C++-Lambda-Ausdrücke die Rekursion? Apr 17, 2024 pm 09:06 PM

Ja, C++-Lambda-Ausdrücke können die Rekursion mithilfe von std::function unterstützen: Verwenden Sie std::function, um einen Verweis auf einen Lambda-Ausdruck zu erfassen. Mit einer erfassten Referenz kann sich ein Lambda-Ausdruck rekursiv selbst aufrufen.

Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Apr 22, 2024 pm 03:18 PM

Der rekursive Algorithmus löst strukturierte Probleme durch den Selbstaufruf von Funktionen. Der Vorteil besteht darin, dass er einfach und leicht zu verstehen ist. Der Nachteil besteht jedoch darin, dass er weniger effizient ist und einen Stapelüberlauf verursachen kann Der Vorteil der Stapeldatenstruktur besteht darin, dass sie effizienter ist und einen Stapelüberlauf vermeidet. Der Nachteil besteht darin, dass der Code möglicherweise komplexer ist. Die Wahl zwischen rekursiv und nicht rekursiv hängt vom Problem und den spezifischen Einschränkungen der Implementierung ab.

Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Sep 17, 2023 pm 07:49 PM

Gegeben seien zwei Strings str_1 und str_2. Das Ziel besteht darin, mithilfe eines rekursiven Verfahrens die Anzahl der Vorkommen der Teilzeichenfolge str2 in der Zeichenfolge str1 zu zählen. Eine rekursive Funktion ist eine Funktion, die sich innerhalb ihrer Definition selbst aufruft. Wenn str1 „Iknowthatyouknowthatiknow“ und str2 „know“ ist, beträgt die Anzahl der Vorkommen -3. Lassen Sie uns das anhand von Beispielen verstehen. Geben Sie beispielsweise str1="TPisTPareTPamTP", str2="TP" ein; geben Sie Countofoccurrencesofasubstringrecursi aus

Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Apr 30, 2024 am 10:30 AM

Eine rekursive Funktion ist eine Technik, die sich selbst wiederholt aufruft, um ein Problem bei der Zeichenfolgenverarbeitung zu lösen. Es erfordert eine Beendigungsbedingung, um eine unendliche Rekursion zu verhindern. Rekursion wird häufig bei Operationen wie der String-Umkehr und der Palindromprüfung verwendet.

Ein Anfängerleitfaden zur C++-Rekursion: Grundlagen schaffen und Intuition entwickeln Ein Anfängerleitfaden zur C++-Rekursion: Grundlagen schaffen und Intuition entwickeln May 01, 2024 pm 05:36 PM

Rekursion ist eine leistungsstarke Technik, die es einer Funktion ermöglicht, sich selbst aufzurufen, um ein Problem zu lösen. In C++ besteht eine rekursive Funktion aus zwei Schlüsselelementen: dem Basisfall (der bestimmt, wann die Rekursion stoppt) und dem rekursiven Aufruf (der das Problem aufteilt). kleinere Teilprobleme). Indem Sie die Grundlagen verstehen und praktische Beispiele wie faktorielle Berechnungen, Fibonacci-Folgen und binäre Baumdurchläufe üben, können Sie Ihre rekursive Intuition entwickeln und sie sicher in Ihrem Code verwenden.

C++-Rekursion für Fortgeschrittene: Grundlegendes zur Tail-Rekursionsoptimierung und ihrer Anwendung C++-Rekursion für Fortgeschrittene: Grundlegendes zur Tail-Rekursionsoptimierung und ihrer Anwendung Apr 30, 2024 am 10:45 AM

Tail Recursion Optimization (TRO) verbessert die Effizienz bestimmter rekursiver Aufrufe. Es wandelt endrekursive Aufrufe in Sprunganweisungen um und speichert den Kontextstatus in Registern statt auf dem Stapel, wodurch zusätzliche Aufrufe und Rückgabeoperationen an den Stapel entfallen und die Effizienz des Algorithmus verbessert wird. Mit TRO können wir tail-rekursive Funktionen (z. B. faktorielle Berechnungen) optimieren. Indem wir den tail-rekursiven Aufruf durch eine goto-Anweisung ersetzen, konvertiert der Compiler den goto-Sprung in TRO und optimiert die Ausführung des rekursiven Algorithmus.

C++-Funktionsrekursion erklärt: Alternativen zur Rekursion C++-Funktionsrekursion erklärt: Alternativen zur Rekursion May 01, 2024 pm 04:54 PM

Rekursion ist eine Technik, bei der sich eine Funktion selbst aufruft, aber die Nachteile eines Stapelüberlaufs und einer Ineffizienz aufweist. Zu den Alternativen gehören: Tail-Recursion-Optimierung, bei der der Compiler rekursive Aufrufe in Schleifen optimiert, die Schleifen anstelle von Rekursion und Coroutinen verwenden, die das Anhalten und Fortsetzen der Ausführung ermöglichen und so rekursives Verhalten simulieren.

See all articles