1 定义
- 递归(recursion):函数直接或间接调用函数自身,直到满足终止条件,再逐层回归;
- 迭代(iteration):利用已知的变量值,不断用变量的旧值递推新值,直到到达结束状态;
2 结构
- 递归是树结构,从字面可以理解为重复“递推”和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历;
- 迭代是环结构,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代直到到达结束状态;
3 与普通循环的比较
- 迭代与普通循环的区别:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值;
- 递归与普通循环的区别:循环是有去无回,而递归则是有去有回(因为存在终止条件);
理论上递归和迭代时间复杂度方面是一样的,但实际应用中(函数调用和函数调用堆栈的开销)递归比迭代效率要低。