斐波那契數列演算法 JS 實現
斐波那契數列的遞推關係定義:
根據定義可以得出程式碼:
存在大量重複計算,效率特別低
解法一、遞推關係式的優化
使用閉包快取 cache 物件,儲存計算過的值,以空間換取時間解決效率問題,時間複雜度與空間複雜度都是 O(n)。
解法二、求解通項公式
解法三、分治策略
這樣,問題就轉化為如何計算這個矩陣的 n 次方了,可以採用快速冪的方法,快速冪的程式碼如下:
注意 JS 整數的最大安全限制不能做精確計算,可以使用 C 語言做更大範圍的計算,程式碼如下:
將快速冪程式碼中的整型變數 a 變成矩陣,數的乘法變成矩陣乘法,就是矩陣快速冪了:
這裡使用 Sylvester 做矩陣計算,matrix 為需要做 n 次冪計算的矩陣,ans 為單位矩陣,該方法完成了下圖公式的紅框部分
最終程式碼如下:
注意:因為 JS 的最大安全整數的限制,經過測試 n 大於 79 後的值有問題。
相關文章
- js實現斐波那契數列JS
- 斐波那契數列js 實現JS
- js迭代器實現斐波那契數列JS
- 斐波那契數列
- 斐波那契數列演算法演算法
- 演算法(1)斐波那契數列演算法
- 斐波那契數列(Java)Java
- 使用Python實現斐波那契數列Python
- JavaScript 實現:輸出斐波那契數列JavaScript
- 斐波那契數列的python實現Python
- 演算法一:斐波那契阿數列演算法
- 斐波那契數列三種實現函式函式
- 大數斐波那契數列的演算法演算法
- 斐波那契數列 (C#)C#
- PHP 與斐波那契數列PHP
- 斐波那契數列詳解
- 斐波那契數
- 計算斐波那契數列的演算法演算法
- 斐波那契數列 多語言實現 筆記筆記
- 斐波那契數列Ⅳ【矩陣乘法】矩陣
- Python 實現 動態規劃 /斐波那契數列Python動態規劃
- 資料結構之斐波那契數列java實現資料結構Java
- 面試題9-斐波那契數列面試題
- [C103] 斐波那契數列
- js計算斐波那契數列程式碼例項JS
- 斐波那契數列的遞迴和非遞迴實現遞迴
- “斐波那契數列”問題的遞推演算法演算法
- 斐波那契數列的分治法計算
- 裴波那契數列(javascript實現)JavaScript
- 【演算法詳解】斐波那契數列 - Fibonacci sequence演算法
- Leedcode-斐波那契數
- 高效率JAVA實現斐波那契Java
- 演算法 - 斐波那契 - javascript 版演算法JavaScript
- 劍指offer-9-斐波那契數列-javaJava
- hdu 3117矩陣+斐波那契數列矩陣
- 斐波那契數列(Fibonacci)遞迴和非遞迴實現遞迴
- 【演算法】Fibonacci(斐波那契數列)相關問題演算法
- 演算法導論學習之補漏:斐波那契數列演算法