3 回答
TA贡献1813条经验 获得超2个赞
你也应该return递归调用,
if(n>1){
System.out.println("debugx");
return isEven(n-2);//return at this point
}
由于您还没有返回,您的递归调用正在到达else语句,因此返回false.
TA贡献1798条经验 获得超7个赞
那是因为你在方法中有一个递归
if(n>1){
System.out.println("debugx");
isEven(n-2);
}
这个怎么运作
10 > 1,进去 10-2 = 8
8 > 1 ,进去 8-2 = 6
6 > 1,进去 6-2 = 4
4 > 1,进去 4-2 = 2
2 > 1, 进去 2-2 = 0
2 > 1,否,然后 n===0,是 ->
System.out.println("debug1");
您需要添加一个return
在isEven(n-2)
TA贡献1866条经验 获得超5个赞
我很确定您只是忘记return在isEven(n-2).
所以 isEven() 方法的更正代码将是这样的:
public static boolean isEven(int n){
System.out.println(n);
if(n>1){
System.out.println("debugx");
return isEven(n-2);
}
if (n == 0) {
System.out.println("debug1");
return true;
}
else if (n == 1) {
System.out.println("debug2");
return false;
}
else{
System.out.println("ERROR");
return false;
}
}
输出现在应如下所示:
debugStart
10
debugx
8
debugx
6
debugx
4
debugx
2
debugx
0
debug1
debugEnd
10 is even
添加回答
举报