Wenn sich eine Entität selbst aufruft
, wird das Programm rekursiv
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. |
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!