1. 程式人生 > >JavaScript實現青蛙跳臺階問題(斐波那契數列)

JavaScript實現青蛙跳臺階問題(斐波那契數列)

問題一:一隻青蛙一次可以跳上一階臺階,也可以跳上二階臺階,請這隻可憐的青蛙跳上N階臺階有幾種方法?

分析:當N=1時有種跳法,當N=2時有種跳法,當N=3時有種跳法,當N=4有種跳法,當N=5時有種跳法,當N=6時有十三種跳法....... 這個規律符合斐波那契數列:


關於斐波那契數列的原理不多說,網上有很多,下面是 js實現跳青蛙問題的程式碼:

 function jumpFloor(n) {

        if(n<=0)return 0;
        if(n == 1) return 1;
        if(n==2) return 2;
        return jumpFloor(n-1) + jumpFloor(n-2)
  }

  console.log(jumpFloor(30)) // 輸出 1346269

上面用遞迴實現的效率很低,當 N=50 的時候在chrome裡就跑不動了,chrome會出現卡死。下面用迭代的方式效率會高出很多

 function jumpFloor2(n) {
        var target = 0, number1 = 1, number2 = 2;

        if(n<=0)return 0;
        if(n == 1) return 1;
        if(n==2) return 2;
        for(var i=3;i<=n;++i) {
            target = number1 + number2;
            number1 = number2;
            number2 = target;
        }
        return target;
    }

    console.log(jumpFloor2(100)) // 輸出 573147844013817200000
    console.log(jumpFloor2(1000)) // 輸出 7.0330367711422765e+208
    console.log(jumpFloor2(10000)) // 輸出 Infinity

通過上面的輸出可以看到當N=10000時就就已經越界了,會輸出 Infinity。但瀏覽器不會卡死,值還是會瞬間輸出

問題二:假設一隻青蛙一次可以跳一個臺階,一次也可以跳N個臺階,請問