我在网上找到了这个递归的例子,但是我不明白里面发生了什么。
public class MysteryClass {
public static void mystery(int n) {
if (n > 0) {
mystery(n-1);
System.out.println(n * 4);
mystery(n-1);
}
}
public static void main(String[] args) {
MysteryClass.mystery(2);
}
}
输出是
4
8
4
我的理解是
- 2 大于 0
- 2 - 1 = 1
- 1 大于 0
- 1 - 1 = 0
- 0 不大于 0
- 现在我们跳到这一行:
System.out.println(n * 4);
- 1 * 4 = 4
- 2 * 4 = 8
- 这里我不明白为什么我多了一个“4”的输出
第 9 步发生了什么?
我用了调试器还是不明白。
最佳答案
MysteryClass.mystery(2);
if (2 > 0) (true) ---> mystery(2-1);
| if(1 > 0) (true) ---> mystery (1-1); // Action (A)
| | if(0 > 0) (false) ---> // do nothing
| |
| System.out.println(1 * 4);
| mystery(1-1);
|
System.out.println(2 * 4);
mystery(2-1); ---> // repeat action (A)
关于java - 递归方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34001811/