迭代与递归的区别

基础不牢,地动山摇。

迭代和递归的区别:

从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!”来从宏观上对二者进行把握。

递归:重复调用函数自身实现循环称为递归;
递归实际上不断地深层调用函数,直到函数有返回才会逐层的返回,递归是用栈机制实现的,每深入一层,都要占去一块栈数据区域,因此,递归涉及到运行时的堆栈开销(参数必须压入堆栈保存,直到该层函数调用返回为止),所以有可能导致堆栈溢出的错误;但是递归编程所体现的思想正是人们追求简洁、将问题交给计算机,以及将大问题分解为相同小问题从而解决大问题的动机。

     例如:if else 调用自己,并在合适时机退出

迭代:利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环;
迭代大部分时候需要人为的对问题进行剖析,分析问题的规律所在,将问题转变为一次次的迭代来逼近答案。迭代不像递归那样对堆栈有一定的要求,另外一旦问题剖析完毕,就可以很容易的通过循环加以实现。迭代的效率高,但却不太容易理解,当遇到数据结构的设计时,比如图表、二叉树、网格等问题时,使用就比较困难,而是用递归就能省掉人工思考解法的过程,只需要不断的将问题分解直到返回就可以了。

     例如:for,while循环

两者关系:所有的迭代可以转换为递归,但递归不一定可以转换成迭代。
总结如下:

定义优点缺点
递归重复调用函数自身实现循环a.用有限的循环语句实现无限集合;
b.代码易读;
c.大问题转化成小问题,减少了代码量。
a.递归不断调用函数,浪费空间;
b.容易造成堆栈溢出
迭代利用变量的原值推出新值;函数内某段代码实现循环。a.效率高,运行时间只随循环的增加而增加;
b.无额外开销。
a.代码难理解;
b.代码不如递归代码简洁;
c.编写复杂问题时,代码逻辑不易想出

两者关系:
a.递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。
b.相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值