1. 程式人生 > >劍指offer 09變態跳臺階

劍指offer 09變態跳臺階

第一步 結果 ring write 遞歸 ret sta .... ==

一只青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 java版本:
public class Solution {

    public  static void main(String[] args){
        long startTime=System.currentTimeMillis();
        System.out.println("第4項的結果是:"+JumpFloorII(4));
        long endTime=System.currentTimeMillis();
        System.out.println(
"程序執行的時間:"+(endTime-startTime)+"ms"); } /*遞歸*/ public static int JumpFloorII(int target){ if(target==1){ return 1; }else{ return 2*JumpFloorII(target-1); } } /*左移*/ /*public static int JumpFloorII(int target){ int a=1; return a<<(target-1); }
*/ }

js版本:

function jumpFloorII(number)
{
    if(number==1){
        return number;
    }else{
          return 2*jumpFloorII(number-1);      
    }// write code here
}

總結:用遞歸的思路

第一步可以跳1階,跳2階.......可以跳n階,有n種跳法。

第二步剩余(n-1)個臺階,f(n-1)種跳法。

第三步剩余(n-2)個臺階,f(n-2)種跳法。

所以

f(n)=f(n-1)+f(n-2)+.........f(1)

f(n-1)=f(n-2)+f(n-3)+.........f(1)

兩式相減得到發f(n)=2*f(n-1)。

左移思路:

每一項的結果都是上一項的2倍,所以左移1位。

劍指offer 09變態跳臺階