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