动态规划:从底部开始解决问题,将所有 小问题解决掉,然后合并成一个整体解决方案,从而解决掉整个大问题
递归:从顶部开始将问题分解,通过解决掉所有分解的小问题来解决整个问题
计算斐波那契数列
function recurFib(n){
if(n<2) {
return n
} else {
return recurFib(n-1) + recurFib(n-2)
}
}
递归:很多函数执行了多次
动态规划使用一个数组存储部分函数计算结果
function dynFib(n) {
var val = []
if(n<2) {
return n
} else {
val[1]=1
val[2]=2
for(var i=3; i<=n; ++i){
val[i]=val[i-1]+val[i-2]
}
return val[n-1]
}
}
//或者只保存n前面的两个值
function iterFib(n) {
var last = 1
var nextLast = 1
var result = 1
for(var i=3; i<=n; ++i){
result = last + nextLast
nextLast = last
last = result
}
return result
}