使用數(shù)組緩存實現(xiàn)Fibonacci算法

沒有緩存的Fibonacci會做大量重復的計算。

public static int fibonacci(int num){

if (num ==1 || num ==2){

return 1;

? ? }else{

return fibonacci(num-1) +fibonacci(num-2);

? ? }

}

當賦值為 60 時,已無法在數(shù)十秒鐘的時間內(nèi)算出來了。JDK 1.8,i5,內(nèi)存 16G。

---------------------分割線---------------

可以用數(shù)組記錄下已經(jīng)算過的數(shù)據(jù)。改進后的算法如下。

private static BigInteger[]fib_cache =new BigInteger[100000];

public static void main(String[] args){

System.out.println(fibonacci_arr(10000));

? ? for (int i =0;i

if (fib_cache[i] !=null) {

System.out.print(fib_cache[i] +" ");

? ? ? ? }

}

}

public static BigIntegerfibonacci_arr(int num){

if (fib_cache[num-1] !=null){

return fib_cache[num-1];

? ? }

BigInteger value;

? ? if (num ==1 || num ==2){

value =new BigInteger("1");

? ? }else {

value =fibonacci_arr(num -1).add(fibonacci_arr(num -2));

? ? }

fib_cache[num-1] = value;

? ? return value;

}


用10000做測試,結(jié)果秒出。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,911評論 0 13
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,142評論 0 2
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,007評論 0 2
  • 分手/一面是父母的反對,一面是對男友的愧疚,撕裂的內(nèi)心,愿哭盡眼淚可以堅強。? 我的回答 翻了翻,發(fā)現(xiàn)知乎上那個回...
    嵐風的葉子閱讀 1,232評論 0 0
  • 公司派了個稽查一家國際連鎖大賣場門店條碼的任務,到了目的地,此番景象,人去樓空… 虛胖的社會在減肥,世事滄桑盡在變...
    蓮籽閱讀 254評論 0 1

友情鏈接更多精彩內(nèi)容