関数を記述し、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;
}