【发布时间】:2018-12-07 03:02:07
【问题描述】:
我是递归概念的新手,我对它的理解是,当它通过该方法时,它会构建堆栈,直到满足基本情况。话虽如此神秘(9),我认为它会输出
0,1,2,3,4,5,6,7,8,9
而是输出了
0,0,1,2,3,4,5,6,7,8.
我的问题是,如果堆栈应该包含神秘(9),为什么不输出 9 以及为什么/如何多次输出 0?当n = 0时,条件不会为假吗?
public static void mystery(int n) {
if (n > 0) {
n--;
mystery(n);
}
System.out.print(n + " ");
}
【问题讨论】:
-
我建议通过调试器运行它,看看“幕后”发生了什么,或者在纸上进行
-
尝试用
mystery(n-1);替换n--; mystery(n); -
@Andreas 我做了,它输出了我的预测。我的问题是如何 n--;不同于神秘(n-1);不就是在做同样的事情吗?
-
@GBlodgett 我在纸上手写了它,但我一定做错了,因为我得到了错误的输出。我只是不知道为什么它是错误的。 n--; 有什么特别之处?与神秘(n-1)相反?
-
1) 神秘(9) -> 如果语句检查 9 > 0 为真则 n--;表示现在 n = 8, stack.push(8) 2)神秘(8) -> if 语句检查 8 > 0 true then n--; n = 7,stack.push(7) ... 9)mystery(1) -> 1 大于 0,n-- 给我们 0 然后 stack.push(0) 10)mystery(0),当 n = 0如果语句返回 false 0 > 0 那么它将打印出 0,然后如您所说,它将打印保存到堆栈中的所有值 stack=[0,1,2,3,4,5,6,7,8]跨度>