QQ空间 新浪微博 腾讯微博 微信 更多
  

递归 尾递归 迭代 递推 的比较--算法课第一次作业

算法课第一次作业:递归 尾递归 迭代 递推 的比较

 

定义

优点

缺点

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()

}

    

posted @ 2018-04-09 10:29  nupt想象之中  阅读(288)  评论(0)    收藏  举报