Java 为什么递归返回堆栈中的第一个调用而不是最后一个?
我一辈子都搞不懂为什么它返回0而不是5。“i”在到达最后一个return语句之前不断递增,但是它总是从堆栈中的第一个调用返回0。我认为,由于堆栈上最近的调用首先命中块“I==5”中的返回,它将返回并打印5 返回0 返回5Java 为什么递归返回堆栈中的第一个调用而不是最后一个?,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){
假设您编写了这样的函数:
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;