[英]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.