私はFib(n-1) + Fib(n-2)
の再帰バージョンよりも効率的なフィボナッチを作成するためのクラスプロジェクトに取り組んでいます。このプロジェクトでは、BigInteger
を使用する必要があります。これまで私はマップを使用して以前のフィブス番号を格納する考えを持っていました。より効率的なBigIntegerのフィボナッチ
public static BigInteger theBigFib(BigInteger n) {
Map<BigInteger, BigInteger> store = new TreeMap<BigInteger, BigInteger>();
if (n.intValue()<= 2){
return BigInteger.ONE;
}else if(store.containsKey(n)){
return store.get(n);
}else{
BigInteger one = new BigInteger("1");
BigInteger two = new BigInteger("2");
BigInteger val = theBigFib(n.subtract(one)).add(theBigFib(n.subtract(two)));
store.put(n,val);
return val;
}
}
マップはそれ以上のものを格納していると思います。また、私はこのライン
BigInteger val = theBigFib(n.subtract(one)).add(theBigFib(n.subtract(two)));
が問題だと思います。誰かが私が間違ってやっていることや、基本的なコードよりも速くするための別の解決方法を明らかにすることができたら、 ありがとう!
あなたがn個までのすべてのフィボナッチ数を保存したい場合は、通常のArrayListも使用できます。 –
私はあなたが問題を複雑にしていると思っています。必要なのは最後の2つの結果だけなので、 'BigInteger [2]'はスタックのように動作します。 –
@AimeeBordaが合意しました。最終回答が必要な場合は、3つの変数も使用できます。 –