题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
题目解析
跳法数量为 0 1 2 3 5 13 …
从第四项开始,每一项等于前两项之和
除第一项外符合斐波那契数列(1,1,2,3,5,8,13,21…)
台阶数 跳法数量 跳法
0 0 0
1 1 1
2 2 11 2
3 3 111 12 21
4 5 1111 112 121 211 22
5 8 11111 1112 1121 1211 2111 122 212 221
6 13 111111 11112 11121 11211 12111 21111
1122 1212 2112 2121 1221 2211 222
递归算法
- 递归每一项等于前两项之和
- 优点:代码简单
- 缺点:内存消耗大,在chrome浏览器中当n>32左右时,开始有些许卡顿,随着数量增大,页面可能会崩溃
function frogJump(n){
if(n<3) return n;
return frogJump(n-1)+frogJump(n-2)
}
非递归算法
- 每一项等于前两项之和
- 优点:内存消耗小,能快速计算并返回数据
- 缺点:代码复杂于递归算法
function frogJump(n){
if(n<3) return n;
let result = 0,
n1 = 1,
n2 = 2;
for(let i=3;i<=n;i++){
result = n1 + n2;
n1 = n2;
n2 = result;
}
return result
}