如果我将一个非常深的递归转换为堆栈形式,我是否可以保证避免堆栈溢出?也就是说,堆栈是在堆栈还是堆上?
之前的递归下降到500万步,然后抛出堆栈溢出。
答案 0 :(得分:0)
是。从现在开始,您将不得不担心内存不足错误。
通常是一种编程语言运行时,其中堆栈在递归中从不处于尾部位置的函数或没有尾部递归优化的运行时增长,与运行时的总可用内存相比,为堆栈保留的内存量较小。当不使用编程语言堆栈时,你使用堆内存,你通常可以更深入,因为它有更多。
然而,当你已经用尽了操作系统愿意给你的所有内存(即没有保留)时,你将不再能够分配更多的内存,并且需要更多内存的随机操作将会失败。
当然,这些微不足道的物理限制并不适用于理论计算。 IE浏览器。图灵机永远不会失败,因为没有更多的内存,因为磁带是无限长的。