递归与迭代的深入解析及应用
1. 递归与方法调用栈
递归是编程中一种强大的技术,在理解递归时,方法调用栈是一个关键概念。以斐波那契数列为例,当调用 fibonacci(3) 时,方法调用栈的变化过程如下:
1. 首次调用 fibonacci(3) (标记为 A),包含局部变量 number 值为 3 的栈帧被压入程序执行栈。
2. 在方法调用 A 内部,会进行方法调用 B 和 E。由于原始方法调用 A 尚未完成,其栈帧仍留在栈中。首先进行的是方法调用 B,其栈帧被压入方法调用 A 的栈帧之上。
3. 方法调用 B 必须执行并完成后,才会进行方法调用 E。在方法调用 B 内部,会进行方法调用 C 和 D。方法调用 C 先执行,其栈帧被压入栈中。当方法调用 C 执行完毕,返回值 1,其栈帧从栈顶弹出。
4. 此时栈顶的方法调用是 B,继续执行方法调用 D。方法调用 D 完成后返回值 0,其栈帧也从栈顶弹出。
5. 方法调用 B 继续执行并返回值 1,其栈帧从栈顶弹出。此时方法调用 A 继续执行,进行方法调用 E。方法调用 E 完成后返回值 1,其栈帧从栈顶弹出。
6. 最后,方法调用 A 完成执行,返回值 2 给调用者,其栈帧也从栈顶弹出。
下面是斐波那契数列方法调用的栈帧变化图示:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef proces
超级会员免费看
订阅专栏 解锁全文
1633

被折叠的 条评论
为什么被折叠?



