如果我删除评论代码工作正常,如果我评论上面评论的行我得到一个错误
package TEST;
class Fact {
// this is a recursive method
int fact(int n) {
// if (n == 1)
// return 1;
int result = fact(n - 1) * n;
return result;
}
public static void main(String args[]) {
Fact f = new Fact();
System.out.println("Factorial of 7 is " + f.fact(5));
System.out.println("Factorial of 4 is " + f.fact(4));
System.out.println("Factorial of 5 is " + f.fact(5));
}
}
if i remove the comment the code is working fine and if i comment the above lines which are commentd i get an error
答案 0 :(得分:1)
每个递归方法都必须有一个退出点,否则它会在无限循环中运行而不会永远停止。所以你的堆栈已满,你会收到Stackoverflow
错误。有关详情,请参阅http://en.wikipedia.org/wiki/Recursion。
退出点的一个很好的例子是Inception中的spinning top
。如果是最高点,Cobb意识到世界是真实的,如果不是,他就是在梦中......
答案 1 :(得分:1)
编写递归程序有两个条件。 1.自称的方法 2.终止条件
当你发表评论时
// if (n == 1)
// return 1;
您的代码不知道何时终止并进入无限循环因此错误。
答案 2 :(得分:0)
这是正确的递归方法:
int fact (int n)
{
if (n <= 1) {
return 1;
}
return n * fact (n - 1);
}
在您的代码中,您缺少基本情况,因此它永远不会停止重复该方法。