动态规划
- 最优子结构:到n层可以由n-2层和n-1层的方法之和得到
- 边界条件:N<=3的 方法=N
- 状态转移方程: f(n)=f(n-2)+f(n-1)
直接递归:
function fn(n){
if(n<=3) return n;
return fn(n-2)+fn(n-1);
}
这样写会超时
所以需要保存中间值,每次保存两个就可以:
function fn(n){
if(n<=3) return n;
let i=4,x=3,y=2,r=0;
while(i<=n){
r=x+y;
y=x;
x=r;
i++
}
return r;
}