엔티티가 자신을 호출
하는 경우 해당 프로그램을 recursive
라고 합니다. 调用自身
时,程序称为递归
。
当存在循环(或重复)
时,程序称为迭代调用
。
示例:求一个数的阶乘的程序
时间复杂度比较
查找递归的时间复杂度比迭代更难。
递归
:递归的时间复杂度可以通过根据先前的调用找到第 n 次递归调用的值来找到。因此,根据基本情况找到目标情况,并根据基本情况求解,可以让我们了解递归方程的时间复杂度。
迭代
:迭代的时间复杂度可以通过找到循环内重复的循环数来找到。
用法比较
使用这些技术中的任何一种都是时间复杂度和代码大小之间的权衡。
如果时间复杂度是重点,递归调用的次数会很大,那么最好使用迭代。
但是,如果时间复杂度不是问题而代码的短小是问题,那么递归将是可行的方法。
递归:递归涉及再次调用相同的函数,因此代码长度非常短。然而,正如我们在分析中看到的那样,当递归调用数量相当多时,递归的时间复杂度可能会呈指数级增长。因此,递归的使用在更短的代码中是有利的,但时间复杂度更高。
迭代:迭代是代码块的重复。这涉及较大的代码量,但时间复杂度通常低于递归。
开销
与迭代相比,递归有大量的开销。
递归
:递归有函数重复调用的开销,即由于重复调用同一个函数
,代码的时间复杂度增加了很多倍
。
迭代
:迭代不涉及任何此类开销。
无限重复
递归
中的 Infinite Repetition 会导致 CPU crash,但在迭代中,当内存耗尽时它会停止。
递归
:在Recursion中,由于指定的基本条件错误,可能会出现无限递归调用,在永远不会为假的情况下,不断调用函数,这可能会导致系统CPU崩溃。
迭代
루프(또는 반복)
가 있는 경우 해당 프로그램을 반복 호출
이라고 합니다. 예: 숫자의 계승을 찾는 프로그램 |
시간 복잡도 비교 | |
---|---|---|
사용법 비교 | 이러한 기술을 사용하는 것은 시간 복잡성과 코드 크기 간의 절충안입니다. | |
시간 복잡도가 중요하고 재귀 호출 수가 많을 경우 반복을 사용하는 것이 가장 좋습니다. | 그러나 시간 복잡성이 문제가 되지 않고 코드가 짧다면 재귀를 사용하는 것이 좋습니다. | |
재귀: 재귀에는 동일한 함수를 다시 호출하는 작업이 포함되므로 코드 길이가 매우 짧습니다. 그러나 분석에서 보았듯이 재귀 호출 수가 많을수록 재귀의 시간 복잡도는 기하급수적으로 증가할 수 있습니다. 따라서 재귀를 사용하는 것은 코드가 짧을수록 유리하지만 시간 복잡도는 더 높습니다. | 반복: 반복은 코드 블록의 반복입니다. 여기에는 더 많은 양의 코드가 포함되지만 시간 복잡도는 일반적으로 재귀보다 낮습니다. | |
오버헤드 | 반복에 비해 재귀에는 오버헤드가 많습니다. | |
무한 반복 | ||
iterative | ||
함수 자체를 호출합니다. | 반복적으로 실행되는 일련의 명령입니다. | |
기능을 확인하세요. | For 루프. |
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)); } }
Factorial of 5 using Recursion is: 120 Factorial of 5 using Iteration is: 120
위 내용은 Java에서 재귀와 반복의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!