2017-09-06 14 views
3

フィボナッチメソッドのパフォーマンスを向上させるためにキャッシュを利用しようとしています。しかし、フィボナッチでさえも計算するのにまだまだ時間がかかります(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; 
     } 
    } 
} 

なぜキャッシュを利用できないのですか?

答えて

11

ヒント:問題がfibonacci()に各再帰呼び出しは独自のキャッシュを持っていることです。呼び出しごとに、空のキャッシュを作成し、その中に何かを格納してすぐに破棄します。

すべての呼び出しで1つのキャッシュを共有します。

私は、あなたがそれをするのが最善の方法を理解させるでしょう。 :)のみ(それはstaticなければならない)fibCacheに1つのインスタンス

+0

私はクラス内の配列を宣言し、それは働いた。どうもありがとう –

3

があるはずです。

関連する問題