劍指offer——變態跳台階


題目描述

  一只青蛙一次可以跳上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     }

 

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM