在本文中,我们将讨论递归和迭代以及它们之间的比较。 这两个术语重复执行一组指令,但它们是具有不同代码结构的不同术语,具有相同的最终结果。 有时,这些术语可能会让初学者感到困惑。 因此,了解它们的区别很重要。

所以,事不宜迟,让我们开始这个话题。 在直接跳到比较图表之前,让我们首先分别讨论这两个术语,并分别举例说明。

递归

递归被称为以类似方式重复事物的过程。 在计算机科学中,递归是在自己的代码中调用函数本身的过程。 任何调用自身的函数都称为递归函数,这样的函数调用称为递归调用。
在定义递归时,必须仔细定义退出条件; 否则,它将进入无限循环。 因此,强加递归的终止条件很重要。 由于维护堆栈的开销,它比迭代慢。 递归代码比迭代代码短; 但是,这很难理解。 递归函数有助于解决各种问题,例如找到数字的阶乘、创建斐波那契数列等。
让我们看一个使用递归查找数字的阶乘的示例。

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
免责声明:以上内容仅是站长个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。