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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (96)

我知道它是溢出但事情是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));
}
提问于
用户回答回答于

我知道这是标记重复,但解决它使用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")));
用户回答回答于

可以用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;
}

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励