Java递归方法查找阶乘返回负输出

时间:2018-09-23 16:55:59

标签: java algorithm recursion

我知道这是溢出的,但事实是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));
}
}

2 个答案:

答案 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)

我知道这被标记为重复,但是使用recursionBigInteger来解决它只是请您(@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")));

希望有帮助!