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

Abd*_*i 2 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));
}
}
Run Code Online (Sandbox Code Playgroud)

dro*_*wny 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 递归方法看起来更漂亮,不是吗? (2认同)
  • 当然,您可以轻松地修改为递归方法.我刚刚添加了如何计算阶乘的大值. (2认同)