【问题标题】:Why does my recursive factorial method always return 0? [duplicate]为什么我的递归阶乘方法总是返回 0? [复制]
【发布时间】:2015-02-18 11:31:01
【问题描述】:

我创建了一个递归方法来计算一个数的阶乘,但是它总是返回 0,我不明白为什么。我在下面提供了我的代码:

public class projectTwenty {
    public static void main(String [] args) {
        int factorialAns = factorial(100);
        System.out.println(factorialAns);
    }
    private static int factorial(int n) {
        if (n == 0) {
          return 1;
        }else {
          return (n * factorial(n-1));
        }
    }
}

我已经尝试改变函数的调用方式和返回值的方式,但到目前为止还没有成功。 我还在 Google/StackOverflow 上搜索过类似的方法/问题,但尚未找到解决方案。

【问题讨论】:

  • 你应该知道这不是计算阶乘的好方法。使用双打、lngamma 函数和记忆化会更好。

标签: java math factorial


【解决方案1】:

因为 100 阶乘的位数太多,会导致整数类型溢出。您可以尝试使用较小的值,它会更好地工作。

如果您想实际计算大阶乘,可以使用 Java 中的 BigInteger 类。

【讨论】:

    【解决方案2】:

    factorial(100) 可能太大而无法容纳在int 中,并且您会出现溢出。对于较小的 n 值,它可以正常工作。

    12 是 factorial(12) 不会溢出的最高 int。

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 2020-02-22
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2018-10-16
      • 2012-11-21
      • 2021-01-24
      • 2019-05-21
      相关资源
      最近更新 更多