题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
1.跳第一级台阶有一种方法,跳第二级台阶有两种方法。
跳第n级台阶(n>=3)f(n),可以跳到第n-1级台阶f(n-1),或者第 n-2级台阶f(n-2),也就是可以有f(n)=f(n-1)+f(n-2)
2.本质是斐波那契数列0,1,1,2,3,5,8,13……
可以发现f1=1,f2=2,f3=3,f4=5,即从第三级台阶开始,每一级的方法数等于前两级台阶方法的总和。
Solution
//递归
public static int JumpFloor(int target) {
if (target <= 2)
return target;
else
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
//非递归
public static int JumpFloor(int target) {
int fn = 1;
int f1 = 1;
int f2 = 1;
for (int i = 1; i < target; i++) {
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
return fn;
}