Java 为什么递归返回堆栈中的第一个调用而不是最后一个?

Java 为什么递归返回堆栈中的第一个调用而不是最后一个?,java,recursion,Java,Recursion,我一辈子都搞不懂为什么它返回0而不是5。“i”在到达最后一个return语句之前不断递增,但是它总是从堆栈中的第一个调用返回0。我认为,由于堆栈上最近的调用首先命中块“I==5”中的返回,它将返回并打印5 返回0 返回5 假设您编写了这样的函数: public static int square(int x) { pow(x, 2); return x; } 它将计算x的平方。但是计算出的平方不会影响任何东西,函数只返回x 现在仔细看看你的代码 if (i == 5){

我一辈子都搞不懂为什么它返回0而不是5。“i”在到达最后一个return语句之前不断递增,但是它总是从堆栈中的第一个调用返回0。我认为,由于堆栈上最近的调用首先命中块“I==5”中的返回,它将返回并打印5

返回0

返回5


假设您编写了这样的函数:

public static int square(int x) {
    pow(x, 2);
    return x;
}
它将计算
x
的平方。但是计算出的平方不会影响任何东西,函数只返回x

现在仔细看看你的代码

if (i == 5){
    return i;           
} else {
    something(i + 1);
}
return i;

如果
i
不是
5
,将调用
某个(i+1)
。然后它将返回一些值,但该值不会影响任何内容。然后,
incrementI
函数将只返回
i
,在您的例子中,它是
0

java!==Javascript什么是
something()
??那应该是
incrementI()
?什么是
something(inti)
做的?递归在哪里?是的,应该是inrementI(),快速打字,谢谢!假设有东西在REMENTI()中,快速输入@NightSkyCode,看来你没有领会Pavel的意思。第一个示例中的
incrementI(i)
函数总是返回
i
:如果
i==5
,它会立即返回
5
,否则它会执行一些操作,然后返回
i
。“一些东西”是什么并不重要。“some stuff”是名为
something()
的函数调用,还是对
incrementI()的递归调用,都无关紧要。无论哪种方式,它都会执行任何操作,然后忽略执行任何操作的结果,然后返回
i
public static int square(int x) {
    pow(x, 2);
    return x;
}
if (i == 5){
    return i;           
} else {
    something(i + 1);
}
return i;