迭代和递归的区别:
从“编程之美”的观点来看,“反复是人,递归是神! 可以借用”这样非常经典的语言。 从宏观上把握两者。
递归:重复调用函数自身实现循环称为递归; 递归不断深入调用函数,直到函数实际上有返回。 递归是通过堆栈机制实现的,每次深入层次时都会占用堆栈数据空间。 因此,递归涉及运行时的堆栈开销(参数必须按栈保存,并保存直到返回该层次的函数调用),因此可能会导致堆栈溢出错误。 但是递归编程体现出的思想是人们追求简洁,把问题交给计算机,把大问题分解成同一个小问题解决大问题的动机。
例如,if else调用自己,并在适当的时间退出
迭代:利用变量的原始值提出新值称为迭代,或者迭代是函数中的某个代码实现循环; 迭代往往需要人为分析问题,分析问题规律,将问题变为一次一次的迭代逼近回答。 迭代就像递归一样,对堆栈没有一定的要求,而且问题分析完成后,通过循环很容易实现。 的迭代很有效率,但很难理解。 在面临图表、二叉树、网格等数据结构的设计时,使用起来很困难,但递归可以省去人工思考解法的过程,只需在返回之前继续分解问题即可。
例如,for、while循环
http://www.Sina.com/http://www.Sina.com /
优缺点定义递归重复调用函数本身实现循环a。 用有限线性文实现无限集
b .代码容易阅读
c .大问题变成了小问题,代码量减少了。
a .递归地继续调用函数,浪费空间
b .容易导致堆栈溢出
反复利用变量的原始值得出新值;
函数中的某个代码实现循环。
a .效率高,工作时间随周期的增加而增加
b .没有额外费用。
a .代码很难理解
b .不像递归代码那么简洁的代码
c .编写复杂问题时,代码逻辑很难考虑
两者的关系a .递归一定有迭代,但迭代不一定有递归,大部分可以相互转换。
b .相对而言,迭代不使用递归(由于递归继续调用函数,因此浪费了空间,容易引起堆栈溢出) )。