フィボナッチ数列アルゴリズム最適化

2715 ワード

フィボナッチアルゴリズムの問題をして、結果は実行がタイムアウトしました.
public class Solution {

    public int Fibonacci(int n) {

    if(n == 0){

      return 0;

    }

    if(n == 1){

      return 1;

    }

    return Fibonacci(n - 1) + Fibonacci(n - 2);

    }

}


文章を見つけましたhttp://blog.csdn.net/sloder/article/details/8624373
提供される考え方に従います.
計算結果アイテムの前の各アイテムの値を保存し、各アイテムの計算はFibonacciメソッドを1回だけ呼び出します.
実際にFibonacciメソッドを呼び出す回数はn−1回のみであり,n=33の場合,Fibonacciメソッドを呼び出す回数は32回のみである. 
最適化されたコードは次のとおりです.
 1 public class Solution {

 2     public int Fibonacci(int n) {

 3         if (n == 0) {

 4       return 0;

 5     }

 6     if (n == 1) {

 7       return 1;

 8     }

 9     int[] array = new int[n+1];

10     array[0] = 0;

11     array[1] = 1;

12     for (int i = 2; i < n+1; i++) {

13       array[i] = array[i - 1] + array[i - 2];

14     }

15     return array[n];

16     }

17 }