算法课第一次作业:递归 尾递归 迭代 递推 的比较
定义 |
优点 |
缺点 |
demo |
|
递归 |
程序调用自身的编程技巧称为递归 |
1)大问题化为小问题,可以极大的减少代码量; 2)用有限的语句来定义对象的无限集合.; 3)代码更简洁清晰,可读性更好 |
1)递归调用函数,浪费空间; 2)递归太深容易造成堆栈的溢出 |
上面的汉诺塔 】】】 】】】】】】 ... 】】】】】】】】】 】】】】】】】】】】】 】】】】】】】】】 ... 】】】】】】 】】】 |
迭代 |
利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B. |
1)迭代效率高,运行时间只因循环次数增加而增加; 2)没什么额外开销,空间上也没有什么增加, |
1) 不容易理解; 2) 代码不如递归简洁; 3) 编写复杂问题时困难。 |
】】】 】】】 】】】 】】】 ... 】】】 】 |
递推 |
递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法 |
递推算法免除了数据进出栈的过程,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值. 递推的精髓在于f(n)的结果一般由f(n-1)、f(n-2)…..f(n-k)的前k次结果推导出来 |
不容易从简单而特殊的案例,找到问题的一般规律,写出f(n)与f(n-1)、f(n-2)…..f(n-k)之间的关系表达式,从而得出求解的结果 |
课本陈惠南算法书第26页 |
尾递归 |
递归函数return语句是自身的函数 |
类似迭代: 占据恒量的内存 |
同上迭代 |
function story() { 从前有座山,山上有座庙, 庙里有个老和尚, 一天和尚对小和尚讲故事:story() } |