Java 使用缓存的斐波那契序列

Java 使用缓存的斐波那契序列,java,algorithm,recursion,dynamic-programming,Java,Algorithm,Recursion,Dynamic Programming,我试图利用缓存来提高斐波那契方法的性能。然而,即使计算斐波那契(40),也要花费很多时间 为什么我不能从缓存中获益?提示:问题是对fibonacci()的每个递归调用都有自己的缓存。对于每个调用,您都会创建一个空缓存,在其中存储一些内容,然后立即丢弃它 您需要的是所有调用共享一个缓存 我会让你找出最好的方法。:) 对于fibCache(必须是static),应该只有一个实例。我在类中声明了数组,它工作了。谢谢 import java.util.Scanner; public class FibW

我试图利用缓存来提高斐波那契方法的性能。然而,即使计算斐波那契(40),也要花费很多时间


为什么我不能从缓存中获益?

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

您需要的是所有调用共享一个缓存


我会让你找出最好的方法。:)

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

我在类中声明了数组,它工作了。谢谢
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;
        }
    }
}