题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:
学过斐波那契数列的,可能一下就反应过来了。这就是一个斐波那契数列。可以把问题拆解成:
有两种跳法,一次跳1个台阶,或者一次跳两个台阶,如果第一次跳一个台阶,那么剩下的跳法就是f(n-1),
如果第一次跳两个台阶,那么剩下的跳法就是f(n-2),总的跳法就是f(n-1)+f(n-2)。
解法一:
递归
public static int JumpFloor(int target) {
if(target <= 0)
return 0;
else if(1 == target)
return 1;
else if(2 == target)
return 2;
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
public static void main(String[] args) {
System.out.println(JumpFloor(4));
}缺点:会占用大量的资源。当计算f(5)时,会将f(1)、f(2)、f(3) 、f(4)计算一遍,当计算f(4)时,又会重新将f(1)、f(2)、f(3)计算一遍,当计算的n越大时,都需要在内存栈分配资源。当n大到一定的程度时,会导致栈溢出。
解法二:
动态归并的思想
每加一次,将和重新赋给定义的变量。
public static int JumpFloor(int target) {
int f = 1;
int j = 1;
int temp = 0;
if(target>0){
for(int i =0;i<target;i++){
temp = f+j;
f = j;
j=temp;
}
return f;
}else{
return 0;
}
}
public static void main(String[] args) {
System.out.println(JumpFloor(5));
}
781

被折叠的 条评论
为什么被折叠?



