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
添加回答
舉報