2012-09-17 100 views
0

我寫了一個計算斐波那契數字的程序。最初,由於資源方面的考慮,我無法輸入大量數據,但現在在我重新編寫之後,它運行速度很快。但是,如果我使用整數,一旦輸入大數字,數字就會變成負數。我嘗試使用,但他們也很快環繞。 如果你不知道我的意思,那麼這段代碼應該解釋一下:斐波那契數字類型

`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)); 
} 

回答

0

我解決我的問題! 我所做的:

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)); 
} 
2

你可以嘗試像以下(迭代):

public static BigInteger fib(int n) { 
    BigInteger a = BigInteger.ONE; 
    BigInteger b = BigInteger.ONE; 
    BigInteger c; 
    for (int i = 3; i <= n; i++) { 
     c = a.add(b); 
     a = b; 
     b = c; 
    } 
    return b; 
} 

見多http://blog.paulvargas.org/numeros-fibonacci/

+0

我做到了遞歸,所以我不想迭代求解...'公共靜態長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

+0

遞歸解決方案可能會產生問題,因爲它會產生一個調用爆炸,這會消耗大量的內存。如果你想這樣做,試試這個:public static BigInteger f(int n){if(n == 0)return BigInteger.ZERO;如果(n == 1)返回BigInteger.ONE;返回f(n-1).add(f(n-2)); }' –

+0

保羅,我沒有電話爆炸,因爲我把它寫成下面粘貼。但是,我不知道如何將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