Java 返回意外结果的简单递归减法
我正在尝试为我的一个项目找出递归。然而,它给了我一个意想不到的结果,在它击中基本情况后开始向后工作。我制作了这个简单的片段来演示。如果我将此3传递给此方法,则预期值将为0。但是,结果返回2。有人能解释为什么我在它达到0后开始增加吗。提前谢谢Java 返回意外结果的简单递归减法,java,algorithm,recursion,Java,Algorithm,Recursion,我正在尝试为我的一个项目找出递归。然而,它给了我一个意想不到的结果,在它击中基本情况后开始向后工作。我制作了这个简单的片段来演示。如果我将此3传递给此方法,则预期值将为0。但是,结果返回2。有人能解释为什么我在它达到0后开始增加吗。提前谢谢 public static int sub(int i) { if (i > 0) { i--; sub(i); } return i; } 您正在忽略由sub(i)返回的值 你可以写: pub
public static int sub(int i) {
if (i > 0) {
i--;
sub(i);
}
return i;
}
您正在忽略由
sub(i)
返回的值
你可以写:
public static int sub(int i) {
if (i > 0) {
i--;
return sub(i);
}
return i;
}
或者只是
public static int sub(int i) {
return (i > 0) ? sub(i-1) : i;
}
您正在忽略由
sub(i)
返回的值
你可以写:
public static int sub(int i) {
if (i > 0) {
i--;
return sub(i);
}
return i;
}
或者只是
public static int sub(int i) {
return (i > 0) ? sub(i-1) : i;
}
您还应该从中间调用返回:
public static int sub(int i) {
if (i > 0) {
i--;
return sub(i);
}
return i;
}
例如,当您调用sub(3)时,它会将一个对sub(2)的调用推送到堆栈中,然后这个调用推送到sub(1),然后再推送到sub(0)。此时,由于i>0
将为false,因此它将返回0
请检查,以了解上述工作原理。您还应通过中间通话返回:
public static int sub(int i) {
if (i > 0) {
i--;
return sub(i);
}
return i;
}
例如,当您调用sub(3)时,它会将一个对sub(2)的调用推送到堆栈中,然后这个调用推送到sub(1),然后再推送到sub(0)。此时,由于i>0
将为false,因此它将返回0
请检查,以了解上述工作原理。您的递归调用可以是
i=sub(i)代码>由于i是int,这是一种基本类型,您应该更新i以反映该值。您的递归调用可以是i=sub(i)代码>因为i是int,这是一种基本类型,所以应该更新i以反映该值。