我寫了一個計算斐波那契數字的程序。最初,由於資源方面的考慮,我無法輸入大量數據,但現在在我重新編寫之後,它運行速度很快。但是,如果我使用整數,一旦輸入大數字,數字就會變成負數。我嘗試使用長,但他們也很快環繞。 如果你不知道我的意思,那麼這段代碼應該解釋一下:斐波那契數字類型
`System.out.println("The 536th fibonacci number: "fib(536));`
`*The 536th fibonacci number: -8757250051716203595*`
顯然,一個負數,使在這方面沒有任何意義,所以我不知道我怎樣才能使它所以它會總是工作 - 不管是什麼,都沒有包裝。
編輯:問題解決了!
import java.math.BigInteger;
public static BigInteger fib(int n)
{
return fib2h(n,BigInteger.ONE,BigInteger.ONE);
}
public static BigInteger fibh(int n,BigInteger o,BigInteger p)
{
if(n==1) return o;
return fib2h(n-1,p,o.add(p));
}
我做到了遞歸,所以我不想迭代求解...'公共靜態長FIB(N久) { 小謊=新長[(INT)N + 1 ]。 return fibh(n-2)+ fibh(n-1); } public static long fibh(long n) if(n == 1 || n == 2)return 1; (fibs [(int)n] == 0){fibs [(int)n] = fibh(n-2)+ fibh(n-1) return fibs [(int)n];} return fibs [(int)n]; }' – faeophyta
遞歸解決方案可能會產生問題,因爲它會產生一個調用爆炸,這會消耗大量的內存。如果你想這樣做,試試這個:public static BigInteger f(int n){if(n == 0)return BigInteger.ZERO;如果(n == 1)返回BigInteger.ONE;返回f(n-1).add(f(n-2)); }' –
保羅,我沒有電話爆炸,因爲我把它寫成下面粘貼。但是,我不知道如何將BigInteger集成到我的解決方案中。 'public static int fib(int n) { return fibh(n,1,1); } ' 'public static int fib2h(int n,int o,int p) { if(n == 1)return o; return fib2h(n-1,p,o + p); } ' – faeophyta