題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
分析:青蛙每次只有一階或者兩階兩種跳法,那麼:
- 它可以跳1級臺階或者2級臺階,所以它上一步必定在第n-1,或者第n-2級臺階,也就是說它跳上n級臺階的跳法數是跳上n-1和跳上n-2級臺階的跳法數之和。
- f(n) = f(n-1) + f(n-2)
- 由實際情況可知:f(1) = 1,f(2) = 2
- 最終得出的是一個斐波那契數列:
| 1,n = 1
f(n) = | 2, n = 2
| f(n-1) + f(n -2), n >2
package RecursionAndLoop;
/*
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。
求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
1種跳法 第一階:1
2種跳法 第二階:1+1 2
3種跳法 第三階:1+1+1 1+2 2+1
5種跳法 第四階:1+1+1+1 2+2 1+2+1 2+1+1 1+1+2
本質上還是斐波那契數列
*/
public class JumpFloor_08 {
public int JumpFloor(int target) {
if (target <= 2) {
return target;
}
int start = 1;
int end = 2;
for(int i = 3; i <= target; i++) {
int tmp = start + end;
start = end;
end = tmp;
}
return end;
}
//推薦
public int JumpFloor1(int target) {
if (target <= 2) {
return target;
}
int sum = 1;
int one = 1;
for (int i = 2; i<=target; i++) {
sum = sum + one;
one = sum - one;
}
return sum;
}
}