我知道这是溢出的,但事实是20相对较小,这不应该发生吗?有没有更好的方法来找到大数(例如1000)的阶乘,而没有得到这个奇怪的结果?
public class RecursiveFunctionsExamples {
public int factorial(Integer n)
{
Integer res;
if(n == 0){
res = 1;
}else{
res = n * factorial(n-1);
}
return res;
}
public static void main(String[] args) {
System.out.println(new RecursiveFunctionsExamples().factorial(20));
}
}
答案 0 :(得分:6)
当然,您可以使用BigInteger
计算大数的阶乘。看到这个;
public static BigInteger factorial(int number) {
BigInteger factorial = BigInteger.ONE;
for (int i = number; i > 0; i--) {
factorial = factorial.multiply(BigInteger.valueOf(i));
}
return factorial;
}
答案 1 :(得分:1)
我知道这被标记为重复,但是使用recursion
和BigInteger
来解决它只是请您(@Abdalnassir Ghzawi)要求它。
public BigInteger factorial(BigInteger n) {
BigInteger res;
if (n == BigInteger.ZERO) {
res = BigInteger.ONE;
} else {
res = n.multiply(factorial(n.subtract(BigInteger.ONE)));
}
return res;
}
您需要使用:
System.out.println(new RecursiveFunctionsExamples().factorial(new BigInteger("6")));
希望有帮助!