2021-05-12 14:32:11
如何用Java實現雙階乘運算
雙階乘用「m!!」表示。
當m是自然數時,表示不超過m且與m有相同奇偶性的所有正整數的乘積。如:
(2n-1)!!=1×3×5×···×(2n-1)
2n!!=2×4×6×8×···×2n
當m是負奇數時,表示絕對值小於它的絕對值的所有負奇數的絕對值積的倒數。
當m是負偶數時,m!!不存在.
在這裡,我們只計算正整數,以正整數為例。
1
建立工程,或使用已有工程,在工程下建立包,包內新建一個類,我命名為DoubleFactorial類,大家根據自己喜好隨便命名,但請保持類名與檔案名一致。
2
設這個數位是常數17,也即我們要運算的數值是17的階乘,也即17!
private static final int ORIGINAL_NUMBER = 17;
3
這裡我用一個遞回函數來處理這個問題。
考慮到奇偶問題,if語句進行判斷:
private static long doubleFactorial(long original) {
if (original % 2 == 0) {
if (original == 2) {
return 2L;
}
return original * doubleFactorial(original - 2);
} else {
if (original == 1) {
return 1L;
}
return original * doubleFactorial(original - 2);
}
}
//遞回函數消耗資源較大,而且long值表示的範圍在此也很局限,因個人電腦設定以及JVM記憶體設定而異,factorial值不應該過大,此處,筆者的機子最多可以算出23的階乘。
4
將該遞回函數寫在一個main函數中,執行一下結果。
此處,為了不發生折行,我把結果寫在兩個輸出語句裡。
System.out.print(ORIGINAL_NUMBER + "!! = ");
System.out.println(doubleFactorial(ORIGINAL_NUMBER));
如果 original 是 偶數 6,則結果為 48 無誤。
如果 original 是 奇數17, 則結果為 68918850,計算器算得也無誤。
相關文章