我正在教自己在java中递归调用方法。我一直在实施StackOverFlowError
:
public class LimitedRecursion {
public void m(int limit) {
if (limit == 0) {
System.out.println("finished2");
}
m(limit - 1);
}
}
我已将限制设定为42。有人能指出我正确的方向吗?它应该终止limit == 0
答案 0 :(得分:8)
这不会完成递归,因为您在满足条件时不退出方法,并且您仍然进行下一次递归调用(m(limit - 1);
):
if (limit == 0) {
System.out.println("finished2");
}
m(limit - 1);
这将结束递归:
if (limit == 0) {
System.out.println("finished2");
return;
}
m(limit - 1);
答案 1 :(得分:1)
正确的递归可以是:
public class LimitedRecursion {
public void m(int limit) {
if (limit == 0) {
System.out.println("finished2");
} else {
m(limit - 1);
}
}
}
答案 2 :(得分:0)
像这样,添加return statement
public static void main(String[] args) {
System.out.println(m(5));
}
public static String m(int limit) {
if (limit == 0) {
return "finished";
}
return m(limit - 1);
}
<强>输出强>
finished