Java中的递归方法不起作用。有任何想法吗?

时间:2012-11-30 11:13:09

标签: java recursion factorial

我试图理解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 个答案:

答案 0 :(得分:3)

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

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

通过替换为

进行修复
if (n==1) return 1;

或添加else

if (n==1) total = 1;
else total = n * factorial (n-1);

答案 1 :(得分:3)

您没有终止递归。尝试

if (n==1) total = 1;
else total = n * factorial (n-1);

答案 2 :(得分:2)

问题是当你找到基本案例时你不会停止

 if (n==1) total = 1;

宁可做

 if (n==1) return 1;

答案 3 :(得分:2)

替换行:

if (n==1) total = 1;

由:

if (n==1) return 1;

否则,你将无限循环。

你的方法是:

private int factorial(int n) {
    return n==1 ? 1 : n * factorial (n-1);
}