运行此代码后我得到java.lang.stackoverflower错的原因是什么?
class recursion {
public static int func(int n) {
int result;
result = func (n - 1);
return result;
}
}
class Output {
public static void main(String args[]) {
recursion obj = new recursion();
System.out.print(obj.func(12));
}
}
答案 0 :(得分:7)
你没有停止条件。
你总是调用func (n - 1)
,因此在堆栈溢出之前会得到一个无限的递归调用链。
正确的递归方法必须具有停止条件。例如,停止条件可以是当n达到0时:
public static int func (int n) {
if (n <= 0)
return 1;
int result = func (n - 1);
return result;
}
答案 1 :(得分:0)
方法func何时停止?
您使用12
调用它,然后返回无限递归。
在一个不相关的说明中:您应该看一下Java代码约定
答案 2 :(得分:0)
这是因为递归函数调用没有限制(终点)。 试试这个 -
class recursion
{
public static int func (int n)
{
int result = 0;
if(n > 0)
result = func (n - 1);
return result;
}
}
class Output
{
public static void main(String args[])
{
System.out.print(recursion.func(12));
}
}
你应该用类名调用静态函数。