在递归中堆栈内存分配

时间:2013-12-15 07:07:51

标签: recursion stack

我被要求编写一个没有边界条件的递归函数。然后,我被问到是否可以将内存分配限制在正在创建的堆栈中,以便计算机不会挂起。如果是,那怎么办?

2 个答案:

答案 0 :(得分:0)

2个假设。 "没有边界条件"意味着无限递归。 "计算机挂起"表示堆栈溢出或应用程序崩溃。电脑总是会挂起来#34;当你为CPU提供无限循环时。

没有创建堆栈。它就在那里,当你执行递归调用时,你在那里分配空间,(现在,这里我可能是错的)用于参数,返回值和返回的点,也许还有更多(wiki:callstack)。创建的是那些包含上下文信息的堆栈帧。

你可以为args腾出空间并返回0.但我认为不可能跳过返回点。因此,对于每个递归级别,您总是需要非零内存。

使无限递归成为可能的唯一方法是,在没有获得堆栈溢出的情况下,使所需的堆栈帧大小为0,这是我看不到的。

答案 1 :(得分:0)

他们可能指的是tail call elimination or optimization

如果语言为每个函数调用分配一个帧,则递归通常会导致堆栈溢出"。但是,大多数基于递归的语言都会消除尾调用中的帧分配。如果在执行尾调用的函数执行期间没有分配额外的内存,那么你将在不增加内存分配的情况下运行。