首頁 > 軟體

如何用Java實現一個階乘運算

2019-12-10 04:06:22

正整數階乘指從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,計算器算得也無誤。



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