使用数组缓存实现Fibonacci算法

没有缓存的Fibonacci会做大量重复的计算。

public static int fibonacci(int num){

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

return 1;

    }else{

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

    }

}

当赋值为 60 时,已无法在数十秒钟的时间内算出来了。JDK 1.8,i5,内存 16G。

---------------------分割线---------------

可以用数组记录下已经算过的数据。改进后的算法如下。

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做测试,结果秒出。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 13,143评论 0 13
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,141评论 0 2
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,704评论 0 2
  • 分手/一面是父母的反对,一面是对男友的愧疚,撕裂的内心,愿哭尽眼泪可以坚强。? 我的回答 翻了翻,发现知乎上那个回...
    岚风的叶子阅读 4,829评论 0 0
  • 公司派了个稽查一家国际连锁大卖场门店条码的任务,到了目的地,此番景象,人去楼空… 虚胖的社会在减肥,世事沧桑尽在变...
    莲籽阅读 1,605评论 0 1