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

标签 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));
}
}

最佳答案

当然您可以使用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;
}

关于查找阶乘的Java递归方法返回负输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468313/

相关文章:

python - 阿克曼函数理解

c++递归没有明显原因退出

javascript - 解释矩形递归 JavaScript 的工作原理

java - 将整数存储在 SQL 数据库中并在 fragment 中检索它

java - 复选框被选中?在复选框元素内循环

java - 需要用对象数组替换ArrayList

algorithm - 计算浮点值与整数相乘以产生小于 1 的最大数

java - 左值和右值,堆栈和堆

python - 如何从头开始编写词法分析器?

c++ - 就时间复杂度而言,可以更快地找到另一个字符串中的最小周期字符串吗