2 回答
TA贡献1831条经验 获得超10个赞
发生这种情况是因为方法调用的状态存储在堆栈(称为“调用堆栈”)中。
您可能知道,堆栈是一种先进后出数据结构。这意味着如果您按顺序将项目 A、B、C 和 D 压入堆栈,则从堆栈中弹出的第一项将是 D,而您弹出的最后一项将是 A。
每当您从方法 A 调用方法 B 时,B 都会被压入调用堆栈并位于 A 之上。B 会做它的事情,当它返回时,它会从堆栈中弹出,而 A 将继续执行它原来的操作正在做。
因此,第一个调用gcd将最后弹出,最后一个调用将首先弹出,两者之间的所有内容都被反转。
可以使用以下命令“模拟”此行为java.util.Stack:
Stack<String> stack = new Stack<>();
for(int i = 0 ; i < 5 ; i++) {
// simulating calling gcd recursively
String s = "Call #" + i + " of gcd";
stack.push(s);
System.out.println(s);
}
for (int i = 0 ; i < 5 ; i++) {
// simulating returning from all the calls to gcd
System.out.print("Returning from ");
System.out.println(stack.pop());
}
它打印:
Call #0 of gcd
Call #1 of gcd
Call #2 of gcd
Call #3 of gcd
Call #4 of gcd
Returning from Call #4 of gcd
Returning from Call #3 of gcd
Returning from Call #2 of gcd
Returning from Call #1 of gcd
Returning from Call #0 of gcd
添加回答
举报
