在本文中,我们将讨论递归和迭代以及它们之间的比较。 这两个术语重复执行一组指令,但它们是具有不同代码结构的不同术语,具有相同的最终结果。 有时,这些术语可能会让初学者感到困惑。 因此,了解它们的区别很重要。
所以,事不宜迟,让我们开始这个话题。 在直接跳到比较图表之前,让我们首先分别讨论这两个术语,并分别举例说明。
递归
递归被称为以类似方式重复事物的过程。 在计算机科学中,递归是在自己的代码中调用函数本身的过程。 任何调用自身的函数都称为递归函数,这样的函数调用称为递归调用。
在定义递归时,必须仔细定义退出条件; 否则,它将进入无限循环。 因此,强加递归的终止条件很重要。 由于维护堆栈的开销,它比迭代慢。 递归代码比迭代代码短; 但是,这很难理解。 递归函数有助于解决各种问题,例如找到数字的阶乘、创建斐波那契数列等。
让我们看一个使用递归查找数字的阶乘的示例。
C程序使用递归查找数字的阶乘
#include <stdio.h>
int fact(int n)
{
if (n == 0)
return 1;
else
return n * fact(n-1);
}
int main()
{
int n,f;
printf("Enter any number: ");
scanf("%d", &n);
f = fact(n);
printf("factorial = %d",f);
}
执行上面示例代码,得到以下结果 -
Enter any number: 5
factorial = 120
迭代
在迭代中,使用循环来重复执行指令集,直到迭代语句的条件变为假。 它比递归相对快。 它的代码量比递归更大。 当循环条件失败时,迭代终止。
在迭代中,时间复杂度相对低于递归。 我们可以通过找到no来计算它的时间复杂度。 在一个循环中重复的循环。
现在,让我们看看使用迭代查找数字的阶乘的程序。
C程序使用迭代找到数字的阶乘
#include <stdio.h>
int fact(int num)
{
int res = 1, i;
for (i = 2; i <= num; i++)
res *= i;
return res;
}
int main()
{
int num, f;
printf("Enter any number: ");
scanf("%d", &num);
f = fact(num);
printf("factorial = %d", f);
}
执行上面示例代码,得到以下结果 -
Enter any number: 4
factorial = 24
递归和迭代的区别
现在,让我们看看迭代和递归之间的比较。我们正在根据一些特征比较这两个术语。
比较项 | 递归 | 迭代 |
---|---|---|
基本 | 递归是在自己的代码中调用函数本身的过程。在迭代中,重复执行指令集。 | 在迭代中,循环用于重复执行指令集,直到条件为假。 |
语法 | 递归有一个终止条件被指定。 | 迭代的格式包括变量的初始化、条件和递增/递减。 |
终止 | 终止条件在递归函数中定义。 | 终止条件在循环的定义中定义。 |
代码大小 | 递归中的代码大小小于迭代中的代码大小。 | 迭代中的代码大小大于递归中的代码大小。 |
无限 | 如果递归函数不满足终止条件,则导致无限递归。无限递归存在系统崩溃的可能性。 | 如果迭代语句的控制条件永远不会为假,则迭代将是无限的。在无限循环中,它反复使用 CPU 周期。 |
应用 | 递归总是应用于函数。 | 迭代应用于循环。 |
速度 | 递归比迭代慢。 | 迭代比递归更快。 |
使用 | 递归通常用于不存在时间复杂度问题且代码量要求较小的情况。 | 必须平衡时间复杂度与大代码大小时使用它。 |
时间复杂度 | 递归具有很高的时间复杂度。 | 迭代的时间复杂度相对较低,可以通过找到循环次数来计算它的时间复杂度。在一个循环中重复的循环。 |
堆栈 | 递归必须更新和维护堆栈。 | 迭代没有使用堆栈。 |
内存 | 与迭代相比,递归使用更多的内存。 | 与递归相比,迭代使用更少的内存。 |
开销 | 由于更新和维护堆栈,会产生大量开销。 | 迭代没有开销。 |
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:递归和迭代的区别
本文链接:https://www.vsdiffer.com/vs/recursion-vs-iteration.html
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。