我知道堆栈数据结构用于将局部变量存储在正在运行的函数的许多其他内容中。
我也理解堆栈如何用于管理递归。
假设有一台机器没有在内存中提供堆栈区域,我不认为将会有支持递归的机器的编程语言。我也想知道机器的编程语言是否支持没有递归的函数。
拜托,有人为我看了一些视线。
答案 0 :(得分:3)
需要一些理论框架来理解递归确实根本不与函数联系在一起,而是与表达性联系在一起。
我不会深入研究,让谷歌填补空白。
是的,我们可以拥有没有堆栈的功能。
我们甚至不需要函数的调用/ ret 机器,我们可以让编译器内联每个函数调用。 因此根本不需要堆栈。
这只考虑编程意义上的功能,而不是数学意义 一个更好的名字将是惯例。 无论如何,这只是概念的简单证明,其功能是可重用的代码,不需要堆栈。
然而,在数学意义上,并非所有函数都能以这种方式实现 这类似于:“我们可以在床上养狗,但不是所有的狗都可以在床上”。
通过引用递归,你处于正确的轨道,但是当涉及到递归时,我们需要更加正式,因为recursion有各种形式。
例如,如果内联函数不以某种方式受约束,则每个函数调用的内联可以循环编译器。 在不深入理论的情况下,为了始终确保我们的编译器不会循环,我们只能允许primitive (bounded) recursion。
“递归”的意思是general recursion,这是内联无法实现的,我们可以证明我们需要无限量的内存用于GR,这就是PR和GR之间的界限,没有筹码。
所以我们可以在没有堆栈的情况下使用函数,甚至递归(对于某种形式的递归)函数。
如果您的问题更实用,请考虑MIPS。 MIPS ISA中没有堆栈指令或堆栈指针寄存器,与堆栈相关的所有内容都只是惯例 编译器可以使用任何内存区域并将其视为堆栈。