フィボナッチ数列の再帰的および非再帰的ソリューション

関数を記述し、nを入力して、フィボナッチ数列のn番目の項(つまり、F(N))を見つけます。

フィボナッチ数列は次のように定義されます:F(0)= 0、F(1)= 1

F(N)= F(N-1)+ F(N-2)、ここでN>1。フィボナッチ数列は0と1から始まり、後続のフィボナッチ数は前の2つの数を足したものです。

答えは1e9 + 7(1000000007)を法とする必要があります。計算の初期結果が1000000008の場合は、1を返します。

方法1 :(再帰的に、以前に計算された値を繰り返し計算するため、不要なオーバーヘッドが生成されるため、計算値を格納するために定義されたマップを次に示します。ただし、メソッドはタイムアウトします!)

        public int fib(int n) {
   Map<Integer,Integer> m=new HashMap<>();
   if (n < 2)
         return n;

       if(!m.containsKey(n)){
          m.put(n,(fib(n-1)+fib(n-2))%1000000007);
      }
       return m.get(n);
}

方法2:非再帰的

public int fib(int n) {
int constant=1000000007;
int fist=0;
int second=1;
int temp=0;
while(n-->0){
temp=(fist+second)%constant;
fist=second%constant;
second=temp%constant;
}
return fist;
}

 

 

おすすめ

転載: blog.csdn.net/qq_44624536/article/details/115190814