尽管我认为我对在void方法中解决堆栈有扎实的了解,但return方法确实使我对堆栈的理解陷入混乱。下面的方法特别让我感到困惑,因为我以为它将返回0,但返回12。
public static int mystery(int n) { // where the method call is mystery(7)
n--; // since n is decremented before the first
// recursive method, the first stack is method(6)
if(n > 0) // base case
mystery(n);
return n * 2; // 0 * 2 = 0?
}
我的问题是为什么如果mystery(7)时方法输出12,如果0是要进入堆栈的最后一个值。这种方法会不会仍然遵循LIFO?
最佳答案
这必须是这样的:
public static int mystery(int n) { // where the method call is mystery(7)
n--; // since n is decremented before the first
// recursive method, the first stack is method(6)
if(n > 0) // base case
n = mystery(n);
return n * 2; // 0 * 2 = 0?
}
现在它将始终返回0。