Java 返回意外结果的简单递归减法

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

我正在尝试为我的一个项目找出递归。然而,它给了我一个意想不到的结果,在它击中基本情况后开始向后工作。我制作了这个简单的片段来演示。如果我将此3传递给此方法,则预期值将为0。但是,结果返回2。有人能解释为什么我在它达到0后开始增加吗。提前谢谢

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以反映该值。