題目描述
一只青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的台階總共有多少種跳法。
問題分析
由於每次跳的階數不確定,沒有一個固定的規律,但是可以了解的是后一次跳是在前一次跳的結果上累加的,因此我們可以考慮使用遞歸的方法來解決問題。
那么從遞歸的三個步驟開始尋找解決方案:
1. 遞歸截止條件。
由於每次可以跳1-n的任意階數,因此無論有多少階,都可以一次跳完,為了表示方便,我們將一次性跳完的情況設為F(0),當n=1時,只能有一種情況,F(1) = 1。當n=2時,可以每次跳1階,也可以一次跳兩階,則F(2) = 2。
2. 遞歸的前后銜接。
假設現在又n階,可以跳完n階的情況分別是:一次跳完F(0);先跳一步F(1),后面還有F(n-1)種跳法;或者先跳兩步F(2),后面還有F(n-2)種跳法。依次類推,第一次跳出n階后,后面還有 F(n-n)中跳法。可以得出:
F(n) = F(n-1)+F(n-2)+F(n-3)+..........+F(0)
3. 遞歸節點數據的處理。
根據題目,本題目中用到的遞歸只是統計前后計數,並沒有數據處理。對於其他遞歸,可以具體情況具體對待。
源碼
1 public int JumpFloorII(int target) { 2 if(target==0||target==1) 3 return 1; 4 if(target==2) 5 return 2; 6 int sum = 0; 7 for(int i=0;i<target;i++){ 8 sum += JumpFloorII(i); 9 } 10 return sum; 11 }