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