迭代与递归的解释
递归与迭代是计算机中常见的两种循环方式;
递归:指程序调用自身的编程思想,即一个函数调用本身;
迭代:利用已知的变量值,根据递推公式不断演进得到变量新值得编程思想;
递归是将大问题化为相同结构的小问题,从待求解的问题出发,一直分解到已经已知答案的最小问题为止,然后再逐级返回,从而得到大问题的解;
迭代是从已知值出发,通过递推式,不断更新变量新值,一直到能够解决要求的问题为止。
递归要分为两部分来看到,'递'是将问题层层往下传递,'归'是将答案层层往上回答
递归算法从思想上更加贴近人们处理问题的思路,而且所处的思想层级算是高层(神),而迭代则更加偏向于底层(人),所以从执行效率上来讲;底层(迭代)往往比高层(递归)来的高,但高层(递归)却能提供更加抽象的服务,更加的简洁。
在循环的次数较大的时候,迭代的效率明显高于递归。大量的递归调用会建立函数的副本,会耗费大量的时间和内存。而迭代则不需要反复调用函数和占用额外的内存。
经典的话:迭代是人,递归是神!“普通程序员用迭代,天才程序员用递归”
相同点:
1、递归和迭代都是循环的一种
不同点:
1、程序结构不同;
递归是重复调用函数自身实现循环
迭代是函数内某段代码实现循环;其中,迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
2、算法结束方式不同;
递归循环中,遇到满足终止条件的情况时逐层返回来结束
迭代则使用计数器结束循环
3、效率不同;
在循环的次数较大的时候,迭代的效率明显高于递归
递归优缺点
优点
- 大问题化为小问题,可以极大的减少代码量;
- 用有限的语句来定义对象的无限集合.;
- 代码更简洁清晰,可读性更好
缺点
- 递归调用函数,浪费空间;
- 递归太深容易造成堆栈的溢出
迭代优缺点
优点
- 迭代效率高,运行时间只因循环次数增加而增加;
- 没什么额外开销,空间上也没有什么增加
缺点
- 代码不如递归简洁;
- 编写复杂问题时困难。