Was ist der Unterschied zwischen Rekursion und Iteration in Java?
1. Der Unterschied zwischen Rekursion und Iteration
Wenn sich eine Entität
selbst aufruft
, wird das Programmrekursiv
genannt.调用自身
时,程序称为递归
。当存在
循环(或重复)
时,程序称为迭代调用
。示例:求一个数的阶乘的程序
时间复杂度比较
查找递归的时间复杂度比迭代更难。
递归
:递归的时间复杂度可以通过根据先前的调用找到第 n 次递归调用的值来找到。因此,根据基本情况找到目标情况,并根据基本情况求解,可以让我们了解递归方程的时间复杂度。迭代
:迭代的时间复杂度可以通过找到循环内重复的循环数来找到。
用法比较
使用这些技术中的任何一种都是时间复杂度和代码大小之间的权衡。
如果时间复杂度是重点,递归调用的次数会很大,那么最好使用迭代。
但是,如果时间复杂度不是问题而代码的短小是问题,那么递归将是可行的方法。
递归:递归涉及再次调用相同的函数,因此代码长度非常短。然而,正如我们在分析中看到的那样,当递归调用数量相当多时,递归的时间复杂度可能会呈指数级增长。因此,递归的使用在更短的代码中是有利的,但时间复杂度更高。
迭代:迭代是代码块的重复。这涉及较大的代码量,但时间复杂度通常低于递归。
开销
与迭代相比,递归有大量的开销。
递归
:递归有函数重复调用的开销,即由于重复调用同一个函数
,代码的时间复杂度增加了很多倍
。迭代
:迭代不涉及任何此类开销。
无限重复
递归
中的 Infinite Repetition 会导致 CPU crash,但在迭代中,当内存耗尽时它会停止。递归
:在Recursion中,由于指定的基本条件错误,可能会出现无限递归调用,在永远不会为假的情况下,不断调用函数,这可能会导致系统CPU崩溃。迭代
Schleife (oder Wiederholung)
gibt, wird das Programm als iterativer Aufruf
bezeichnet. Beispiel: Programm zum Ermitteln der Fakultät einer Zahl |
Zeitkomplexitätsvergleich | |
---|---|---|
Nutzungsvergleich | Die Verwendung einer dieser Techniken ist ein Kompromiss zwischen zeitlicher Komplexität und Codegröße. | |
Wenn die zeitliche Komplexität im Vordergrund steht und die Anzahl der rekursiven Aufrufe groß ist, ist es am besten, die Iteration zu verwenden. | Wenn jedoch die Zeitkomplexität kein Problem darstellt und die Kürze des Codes schon, dann wäre Rekursion der richtige Weg. | |
Rekursion: Bei der Rekursion wird dieselbe Funktion erneut aufgerufen, sodass die Codelänge sehr kurz ist. Wie wir jedoch in unserer Analyse gesehen haben, kann die zeitliche Komplexität der Rekursion exponentiell zunehmen, wenn die Anzahl der rekursiven Aufrufe beträchtlich ist. Daher ist die Verwendung von Rekursion bei kürzerem Code, jedoch bei höherer Zeitkomplexität, von Vorteil. | Iteration: Iteration ist die Wiederholung eines Codeblocks. Dies erfordert eine größere Menge an Code, aber die zeitliche Komplexität ist normalerweise geringer als bei einer Rekursion. | |
Overhead | Im Vergleich zur Iteration hat die Rekursion einen hohen Overhead. | |
Unendliche Wiederholung | Unendliche Wiederholung in der | |
Apps | für Funktionalität. | |
Beendigung | Im Basisfall gibt es hier keine Funktionsaufrufe. | |
Verwendung | Verwenden Sie ihn, wenn die Codegröße klein sein muss und die Zeitkomplexität kein Problem darstellt. | |
Codegröße. | Weniger Code. |
Die zeitliche Komplexität ist relativ gering (im Allgemeinen Polynom-Logarithmus).
🎜🎜🎜Raumkomplexität🎜🎜Die Raumkomplexität ist höher als die Iteration. 🎜🎜Die räumliche Komplexität ist gering. 🎜🎜🎜🎜Heap🎜🎜Der Stapel hier wird zum Speichern lokaler Variablen verwendet, wenn Funktionen aufgerufen werden. 🎜🎜Verwendet keinen Stapel. 🎜🎜🎜🎜Geschwindigkeit🎜🎜Die Ausführung ist langsam, da der Aufwand für die Wartung und Aktualisierung des Stapels anfällt. 🎜🎜Im Allgemeinen ist es schneller als die Rekursion, da der Stapel nicht verwendet wird. 🎜🎜🎜🎜Speicher🎜🎜Rekursion benötigt im Vergleich zur Iteration mehr Speicher. 🎜🎜Kein Overhead, da es in der Iteration keine Funktionsaufrufe gibt. 🎜🎜🎜🎜Elevated🎜🎜hat den Overhead wiederholter Funktionsaufrufe. 🎜🎜Kein Overhead, da es in der Iteration keine Funktionsaufrufe gibt. 🎜🎜🎜🎜Unendliche Wiederholung🎜🎜Wenn eine rekursive Funktion die Beendigungsbedingung nicht erfüllt oder undefiniert ist oder der Basisfall nie erreicht wird, führt dies zu einem Stapelüberlauffehler und das System kann bei unendlicher Rekursion abstürzen. 🎜🎜Wenn die Kontrollbedingung der Iterationsanweisung niemals falsch ist oder die Kontrollvariable den Endwert nicht erreicht, führt dies zu einer Endlosschleife. In einer Endlosschleife nutzt es immer wieder CPU-Zyklen. 🎜🎜🎜🎜🎜2. Code🎜public class Test { // ----- 递归 ----- // 求给定数的阶乘的方法 static int factorialUsingRecursion(int n) { if (n == 0) return 1; // 递归呼叫 return n * factorialUsingRecursion(n - 1); } // -----迭代 ----- //求给定数的阶乘的方法 static int factorialUsingIteration(int n) { int res = 1, i; // 迭代 for (i = 2; i <= n; i++) res *= i; return res; } public static void main(String[] args) { int num = 5; System.out.println("Factorial of " + num + " using Recursion is: " + factorialUsingRecursion(5)); System.out.println("Factorial of " + num + " using Iteration is: " + factorialUsingIteration(5)); } }
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Rekursion und Iteration in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist
