递归和迭代是循环最常用的两种编程思想,初学者特别容易将两者搞混,特此小做整理。
递归(recursion)
又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。
递归分为两个阶段:
(1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;
(2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解。
使用递归要注意的有两点:
(1)递归就是在过程或函数里面调用自身;
(2)在使用递归时,必须有一个明确的递归结束条件。称为递归出口。
迭代(iteration)
迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
在计算机科学中,迭代是程序中对一组指令(或一定步骤)的重复。
迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。迭代使用计数器结束循环。
两者之间的区别
(1)实现方式:递归是重复调用函数自身实现循环;迭代是函数内某段代码实现循环。
(2)终止方式:递归循环中遇到满足终止条件的情况时逐层返回来结束;迭代则使用计数器结束循环。
(3)效率方面:在循环的次数较大的时候,迭代的效率明显高于递归。
两者之间的关系
(1)递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。
(2)能用迭代的不用递归,递归调用函数,计算有重复,浪费空间,并且递归太深容易造成堆栈的溢出.