2021-05-12 14:32:11
如何用Java實現一個階乘運算
正整數階乘指從1乘以2乘以3乘以4一直乘到所要求的數。例如,所要求的數是n,則階乘式是1×2×3×……×n,設得到的積是x,x就是n的階乘。這裡,我介紹兩種用Java實現階乘運算的方方式。
1
建立工程,或使用已有工程,在工程下建立包,包內新建一個類,我命名為Factorial類,大家根據自己喜好隨便命名,但請保持類名與檔案名一致。
2
設這個數位是常數17,也即我們要運算的數值是17的階乘,也即17!
private static final int ORIGINAL_NUMBER = 17;
3
運用一個for迴圈將數值1依次與比他大1的數位相乘直至到17為止。
這裡的值比較大,因此int值轉化為long值運算。
long factorial = 1L;
for (int index = 1; index <= ORIGINAL_NUMBER; index++) {
factorial = factorial * index;
}
4
將該for語句寫在一個main函數中,執行一下結果。
如果 factorial 是 6,則結果為 720 無誤。
如果 factorial 是 17, 則結果為 355687428096000,計算器算得也無誤。
1
如同第一種方式一樣,首先建立工程,或使用已有工程,在工程下建立包,包內新建一個類,我命名為Factorial類,大家根據自己喜好隨便命名,但請保持類名與檔案名一致。
2
第一種方式我設這個數位是常數17,在這裡,為了做對比試驗,因此,我還是將這個值設為17,也即我們要運算的數值是17的階乘,也即17!
private static final int ORIGINAL_NUMBER = 17;
3
這裡要用一個遞回函數來處理這個問題。
private static long factorial(long factorial) {
if (factorial == 1) {
return 1;
}
return factorial * factorial(factorial - 1);
}
//這裡應該注意,遞回函數消耗資源較大,而且long值表示的範圍在此也很局限,因個人電腦設定以及JVM記憶體設定而異,factorial值不應該過大,此處,筆者的機子最多可以算出23的階乘。
4
將該遞回函數寫在一個main函數中,執行一下結果。
此處,為了不發生折行,我把結果寫在兩個輸出語句裡。
System.out.print(ORIGINAL_NUMBER + "! = ");
System.out.println(factorial(ORIGINAL_NUMBER));
如果 factorial 是 6,則結果為 720 無誤。
如果 factorial 是 17, 則結果為 355687428096000,計算器算得也無誤。
相關文章