我刚刚通过一些练习就开始为大学学习Java。我不是编程新手,只是Java。 我遵循了所有说明,但是Java的return函数确实做了一些很奇怪的事情。 我插入了一些调试输出以更好地理解代码。程序的CMD.output包括在内。
我认为该函数将在返回后立即终止。 但是为什么在这种情况下不这样做?
public class Rekursion {
public static void main(String[] args) {
int zahl = 10;
System.out.println("debugStart");
boolean even = isEven(zahl);
System.out.println("debugEnd");
if (even == true) {
System.out.println(zahl + " is even");
} else {
System.out.println(zahl + " is uneven");
}
}
public static boolean isEven(int n) {
System.out.println(n);
if (n > 1) {
System.out.println("debugx");
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;
}
}
}
输出(cmd):
debugStart
10
debugx
8
debugx
6
debugx
4
debugx
2
debugx
0
debug1
程序通常需要在此处停止。但是它继续....
ERROR
ERROR
ERROR
ERROR
ERROR
debugEnd
10 is uneven
答案 0 :(得分:9)
您也应该return
进行递归调用,
if(n>1){
System.out.println("debugx");
return isEven(n-2);//return at this point
}
由于尚未返回,因此递归调用到达else
条语句,因此返回false
。
答案 1 :(得分:5)
那是因为您在方法内部具有递归
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)
答案 2 :(得分:1)
更正的代码:
public class Rekursion{
public static void main(String[] args){
int zahl = 10;
System.out.println("debugStart");
boolean even = isEven(zahl);
System.out.println("debugEnd");
if(even == true){
System.out.println(zahl+" is even");
}
else{
System.out.println(zahl+" is uneven");
}
}
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;
}
}
}
添加了return
语句。
答案 3 :(得分:1)
我很确定您只是忘记在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