Fibonacci序列使用Cache

时间:2017-09-06 11:12:17

标签: java algorithm recursion dynamic-programming

我正在尝试使用缓存来提高我的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;
        }
    }
}

为什么我无法从缓存中受益?

2 个答案:

答案 0 :(得分:12)

提示:问题是每次递归调用fibonacci()都有自己的缓存。对于每次调用,您都会创建一个空缓存,在其中存储内容,然后立即将其丢弃。

您想要的是所有呼叫共享的一个缓存。

我会告诉你如何最好地做到这一点。 :)

答案 1 :(得分:3)

fibCache应该只有一个实例(必须是static)。