網頁

2018/8/24

Java 遞迴題目 階乘計算

Java遞迴基本題,使用遞迴計算階乘。

給定一整數值,例如5,則階乘為 5 * 4 * 3 * 2 * 1 = 120。撰寫一遞迴方法來計算。如果題目機車一點,就只會說請計算10的階乘,並不會提示你使用遞迴來處理。

public class Main {

  public static void main(String[] args) {
    int value = 20;
    System.out.println(factorial(value)); // 2432902008176640000
  }

  // 計算階乘的遞迴方法
  private static long factorial(int v) {
    if (v <= 0) {
      return 1;
    }
    return v * factorial(v - 1);
  }

}

因為階乘的結果通常很大,例如
15! = 1307674368000
20! = 2432902008176640000

而Java整數Integer最大為2147483647,Long的最大為9223372036854775807,可能會有溢位的問題, 可以改用BigDecimal來計算(不過計算的値太大,例如1000的階乘,可能也是有問題吧)。

public class Main {

  public static void main(String[] args) {
    int value = 10;
    System.out.println(factorial(value)); // 3628800
  }

  // 計算階乘的遞迴方法
  private static BigDecimal factorial(int v) {
    if (v <= 0) {
      return new BigDecimal(1);
    }
    return new BigDecimal(v).multiply(factorial(v - 1));
  }

}

沒有留言:

張貼留言