回答

5

完全拥有堆栈编译器在支持递归时必须具备的特殊处理。

在较早的FORTRAN版本的编程语言中,运行时环境没有函数堆栈,每个函数只有一个激活记录保留在内存中某处。这意味着递归并非完全可能,因为如果递归调用某个函数,则会覆盖其唯一的激活记录,从而失去了如何到达的上下文跟踪。

函数堆栈的引入是首先使得递归实际上以编程语言表达的。在此之前,程序员会使用递归作为抽象解决问题的工具,但由于缺少调用堆栈,必须将该代码翻译为迭代逻辑。

为了使编程语言支持递归,它需要有一些动态维护调用堆栈的机制。这不必通过明确的堆栈;你理论上可以动态分配所有的堆栈帧,并将它们链接在一起作为链表。例如,如果您想要支持协程或闭包,并且在函数返回后实际需要保留旧的激活记录,以便稍后可以存储数据,则这会很有用。

希望这会有所帮助!

+0

这有很大的帮助。谢谢! – Halaby