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));
}
}
沒有留言:
張貼留言