Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的递归方法不起作用。有什么想法吗?_Java_Recursion_Factorial - Fatal编程技术网

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

Java中的递归方法不起作用。有什么想法吗?,java,recursion,factorial,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

我试图理解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);
   }
}

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

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

用替换来修复

if (n==1) return 1;
或添加
其他

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

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

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

用替换来修复

if (n==1) return 1;
或添加
其他

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

您没有终止递归。试一试

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

您没有终止递归。试一试

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

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

 if (n==1) total = 1;
宁可

 if (n==1) return 1;

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

 if (n==1) total = 1;
宁可

 if (n==1) return 1;
更换线路:

if (n==1) total = 1;
作者:

否则,将无限循环

你的方法是:

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

if (n==1) total = 1;
作者:

否则,将无限循环

你的方法是:

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

当它降到n==1时,你应该返回,否则你仍然进入阶乘,再也不会出现错误Bugging是你的朋友,你会在一分钟内发现错误:-)当它降到n==1时,你应该返回,否则你仍然进入阶乘,再也不会出现错误Bugging是你的朋友,您可能会在一分钟内发现该错误:-)