2016-11-12 31 views
-3

通常情況下,大多數人嘗試使用該函數返回類型設置爲int實現階乘功能,雙重或long.The代碼可能是:爲什麼人們說「因數法不好用!」在java中?

int fact(int n){ 
     int result; 
     if(n==1){ 
      return 1; 
     }else{ 
      result = fact(n-1) * n; 
      return result; 
     } 
    } 

但是,如果你想找到大於170 .Does!上面的代碼在java中正常工作?

+0

... –

+2

不要聽什麼「人」說。 –

+1

我投票結束這個問題作爲題外話,因爲我們很難說其他人在想什麼。這個問題也不是問答風格。 –

回答

0

對於非常大的factorial值,您必須使用可以容納多於170!的數據類型。修改你的代碼看起來像:

public static BigInteger fact(BigInteger n) 
{ 
    BigInteger result; 
    if (n.compareTo(BigInteger.ONE) <= 0) 
    { 
     return BigInteger.ONE; 
    } 
    else 
    { 
     return n.multiply(fact(n.subtract(BigInteger.ONE))); 
    } 
} 
,如果你有足夠的RAM
+0

你能否解釋BigIntiger如何分配內存?它是否根據可用的RAM空間而變化? –

+0

是的,它根據BigInteger的大小來動態分配內存。 1000位BigInteger比5位數需要更多的內存。請注意,通常,與簡單標量類型(如int,long或even)相比,BigInteger相當慢,因爲所有計算都是用軟件完成的,而不是用硬件完成的。對階乘的迭代方法也可能比遞歸方法快。 –

+0

「因式分析的迭代方法可能比遞歸方法更快」的原因是什麼?通常兩種方法的時間複雜度都是O(n)。那麼這兩種方法如何快速變化? –

相關問題