更新時間:2022-10-18 11:42:28 來源:動力節點 瀏覽7381次
給定一個非負整數n,階乘是所有小于或等于n的正整數的乘積。
在這個快速教程中,我們將探索在 Java 中為給定數字計算階乘的不同方法。
(1)使用for循環的階乘
讓我們看一個使用Java for循環的基本階乘算法:
public long factorialUsingForLoop(int n) {
long fact = 1;
for (int i = 2; i <= n; i++) {
fact = fact * i;
}
return fact;
}
上述解決方案適用于最多 20 的數字。但是,如果我們嘗試大于 20 的值,那么它將失敗,因為結果太大而無法放入 long中,從而導致溢出。
讓我們再看幾個,注意這些都只適用于少數人。
(2)使用 Java 8 流的階乘
我們還可以使用Java 8 Stream API很容易地計算階乘:
public long factorialUsingStreams(int n) {
return LongStream.rangeClosed(1, n)
.reduce(1, (long x, long y) -> x * y);
}
在這個程序中,我們首先使用 LongStream來遍歷 1 和n之間的數字。然后我們使用reduce(),它使用標識值和累加器函數進行歸約步驟。
(3)使用遞歸的階乘
讓我們看另一個階乘程序的例子,這次使用遞歸:
public long factorialUsingRecursion(int n) {
if (n <= 2) {
return n;
}
return n * factorialUsingRecursion(n - 1);
}
(4)使用 Apache Commons Math 的階乘
Apache Commons Math有一個帶有靜態階乘方法的CombinatoricsUtils類,我們可以使用它來計算階乘。
要包含 Apache Commons Math,我們將在 pom中 添加commons-math3依賴項:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
讓我們看一個使用 CombinatoricsUtils 類的示例:
public long factorialUsingApacheCommons(int n) {
return CombinatoricsUtils.factorial(n);
}
請注意,它的返回類型是long,就像我們自己開發的解決方案一樣。
這意味著如果計算值超過Long.MAX_VALUE,則??會拋出MathArithmeticException。
為了變得更大,我們將需要不同的返回類型。
(1)使用BigInteger的階乘
如前所述,long數據類型只能用于n <= 20的階乘。
對于較大的n值,我們可以使用java.math包中的BigInteger類 ,它可以容納高達2^Integer.MAX_VALUE的值:
public BigInteger factorialHavingLargeResult(int n) {
BigInteger result = BigInteger.ONE;
for (int i = 2; i <= n; i++)
result = result.multiply(BigInteger.valueOf(i));
return result;
}
(2)使用Guava的階乘
Google 的Guava庫還提供了一種用于計算較大數字的階乘的實用方法。
要包含該庫,我們可以將其guava依賴 項添加到我們的 pom中:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
現在,我們可以使用BigIntegerMath類中的靜態階乘方法 來計算給定數字的階乘:
public BigInteger factorialUsingGuava(int n) {
return BigIntegerMath.factorial(n);
}
以上就是關于“Java求階乘的計算方法”的介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容細致全面,很適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習