JavaScript實現青蛙跳臺階問題(斐波那契數列)
阿新 • • 發佈:2019-01-23
問題一:一隻青蛙一次可以跳上一階臺階,也可以跳上二階臺階,請這隻可憐的青蛙跳上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個臺階,請問