1.含义不同
递归:是重复调用函数自身实现循环。遇到满足终止条件的情况时逐层返回来结束
迭代:是函数内某段代码实现循环,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。迭代则使用计数器结束循环。
2.结构不同
迭代:迭代是环形结构,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代知道到达结束状态。
递归:递归是树结构,从字面可以理解为重复“递推”,和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历。
什么时候停止:迭代在循环条件失败时终止,递归在遇到基本情况时终止。
3.用法不同
迭代:迭代式代码块的重复。这涉及更大的代码大小,但时间复杂度通常小于递归的时间复杂度。
递归:递归涉及再次强调调用相同的函数,因此代码长度非常小。但是,当有相当数量的递归调用时,递归的时间复杂度可能会呈指数增长。因此,在较短的代码中使用递归是有利的,但时间复杂度较高。
4.时间复杂度不同
迭代:迭代的时间复杂度可以通过查找循环内重复的周期数来发现。
递归:递归的时间复杂度可以通过根据前面的调用查找第 n 个递归调用的值来查找。因此,根据基情况找到目标情况,并根据基本情况求解,可以让我们了解递归方程的时间复杂度。
5.无线重复后果不同
迭代:由于迭代器赋值或增量错误,或在终止条件中,无限迭代将导致无限循环,这可能会导致也可能不会导致系统错误,但肯定会进一步停止程序执行。
递归:在递归中,由于指定基本条件时出现一些错误,可能会发生无限递归调用,该基本条件永远不会变为false,不断调用函数,这可能导致系统CPU崩溃。
6.与普通函数的区别
迭代与普通循环的区别:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
递归与普通循环的区别:循环是有去无回,而递归则是有去有回(因为存在终止条件)。