1

我试图理解 Java 中的递归方法,并尝试了这种简单的方法来计算阶乘。不知何故,它不起作用。有人能告诉我为什么吗?

public class FactorialRecursive extends ConsoleProgram {

   public void run() {
      println("This program calculates the factorial of an integer n.");
      int n = readInt("Please insert n: ");
      int result = factorial(n);
      println("The factorial of " + n + " is " + result);
   }

   private int factorial(int n) {
      int total;
      if (n == 1) total = 1;
      total = n * factorial(n - 1);
      return (total);
   }
}
4

4 回答 4

4

这是因为您的基本情况 ( n == 1) 不会立即返回。

您只分配total,但不返回:相反,您n * factorial(n-1)再次使用,进入无限递归。

通过替换来修复

if (n==1) return 1;

或添加else

if (n==1) total = 1;
else total = n * factorial (n-1);
于 2012-11-30T11:15:25.640 回答
3

您没有终止递归。尝试

if (n==1) total = 1;
else total = n * factorial (n-1);
于 2012-11-30T11:15:58.903 回答
2

问题是当你找到你的基本情况时你不会停下来

 if (n==1) total = 1;

宁可做

 if (n==1) return 1;
于 2012-11-30T11:16:04.927 回答
2

换行:

if (n==1) total = 1;

经过:

if (n==1) return 1;

否则,您将无限循环。

你的方法是:

private int factorial(int n) {
    return n==1 ? 1 : n * factorial (n-1);
}
于 2012-11-30T11:16:23.740 回答