首頁 > 軟體

如何用Java實現雙階乘運算

2019-12-10 04:06:21

雙階乘用「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,計算器算得也無誤。



IT145.com E-mail:sddin#qq.com