尽管我认为我对在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。

09-05 05:31