簡體   English   中英

使用緩存的斐波那契數列

[英]Fibonacci Sequence using Cache

我正在嘗試使用緩存來提高我的斐波那契方法的性能。 然而,計算 fibonacci(40) 仍然需要很多時間。

import java.util.Scanner;
public class FibWithCache {

    public static void main(String args[]) {
        System.out.println("Enter Fibonacci index: ");
        Scanner sc = new Scanner(System.in);
        int index = sc.nextInt();
        sc.close();

        System.out.println(fibonacci(index));
    }

    private static long fibonacci(int index) {

        long result = 0;
        long[] fibCache = new long[200];

        if(index==0)
            return 0;
        else if(index == 1)
            return 1;
        else if(fibCache[index] != 0)
            return fibCache[index];
        else {
            result = fibonacci(index-1) + fibonacci(index-2);
            fibCache[index] = result;
            return result;
        }
    }
}

為什么我無法從緩存中受益?

提示:問題是每次對fibonacci()遞歸調用都有自己的緩存。 對於每個調用,您創建一個空緩存,在其中存儲內容,並立即丟棄它。

你想要的是所有調用共享的一個緩存。

我會告訴你如何最好地做到這一點。 :)

fibCache應該只有一個實例(它必須是static )。

public class FibonacciCache {

    private int[] cache = new int[1000];
    
    public FibonacciCache(){
        // n de 1 = 1;
        cache[1] = 1;
    }

    public int fibonacciDe(int n){
        if(cache[n] != 0){
            return cache[n];
        }
    
        // n de 0 = 0
        if(n <= 0){
            return 0;
        }
                        
        int result = fibonacciDe(n-1) + fibonacciDe(n-2);
        cache[n] = result;
        return result;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM