題目:一只青蛙一次可以跳上1級臺階次兆,也可以跳上2級援岩。求該青蛙跳上一個n級的臺階總共有多少種跳法歼狼。
思路:
- 首先我們考慮最簡單的情況。如果只有1級臺階享怀,那顯然只有一種跳法羽峰。如果有2級臺階,那就有兩種跳的方法了:一種是分兩次跳添瓷,每次跳1級限寞;另外一種就是一次跳2級。
- 現(xiàn)在我們再來討論一般情況仰坦。我們把n級臺階時的跳法看成是n的函數(shù),記為f(n)计雌。當n>2時悄晃,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳法數(shù)目等于后面剩下的n-1級臺階的跳法數(shù)目凿滤,即為f(n-1)妈橄;另外一種選擇是第一次跳2級,此時跳法數(shù)目等于后面剩下的n-2級臺階的跳法數(shù)目翁脆,即為f(n-2)眷蚓。因此n級臺階時的不同跳法的總數(shù)f(n)=f(n-1)+(f-2)。
我們把上面的分析用一個公式總結如下:
/ 1 n = 1
f(n) = 2 n = 2
\ f(n-1)+f(n-2) n > 2
分析到這里反番,相信很多人都能看出這就是我們熟悉的Fibonacci序列沙热。
// 遞歸的方式
public int jumpFloor(int n) {
if(n <= 0)
return 0;
else if(n == 1)
return 1;
else if(n == 2)
return 2;
else
return jumpFloor(n - 1) + jumpFloor(n - 2);
}
// 不使用遞歸
public int jumpFloor(int n) {
if(n == 1 || n == 2){
return n;
}
int jumpFib = 0;
int NumberMinusOne = 2;
int NumberMinusTwo = 1;
for(int i = 3; i <= n; i++){
jumpFib = NumberMinusOne + NumberMinusTwo;
NumberMinusTwo = NumberMinusOne;
NumberMinusOne = jumpFib;
}
return jumpFib;
}