天天看點

遞歸1到100的階乘出現的變量溢出問題

今天,在看遞歸的時候發現1遞歸到100的階乘,結果會成0;看了下發現是内容超出了變量本身的長度。

例如:int等于4個位元組,而每個位元組又等于8位,故而得之長度為32位。

而通過1*2*3....*35的時候發現結果超出變量本身長度,導緻二進制轉換丢失多32位的資料,十進制化之後結果為0。

那麼該怎樣解決這個問題了?

我們可以同Java幫我封裝的資料類來處理溢出的問題————BigInteger

修改之前的代碼:

public static int multiply(int i){
        if(i==1){
            return 1;
        }else{
            return multiply(--i)*i;
        }
    }
           

修改之後:

public static BigInteger multiply(BigInteger i){
        if(i.compareTo(new BigInteger("1"))!=1){
            return new BigInteger("1");
        }else{
            return multiply(i.subtract(new BigInteger("1"))).multiply(i);
        }
    }
           

測試代碼:

public class Main {

    public static void main(String[] args) {
        System.out.println(multiply(new BigInteger("35")));
    }
}
           

輸出結果:

遞歸1到100的階乘出現的變量溢出問題