递归与手动堆栈 - 在哪种情况下哪个是首选?

Aqu*_*irl 6 recursion performance stack recursive-datastructures data-structures

递归程序在内部创建堆栈,并使用户编写更少的代码.

除了上面提到的原因之外,是否有任何情况下递归实际上比手动堆栈更受欢迎?

编辑1:

动态内存分配以什么方式比递归程序在堆上的分配更"昂贵"?

rua*_*akh 5

我认为您在说“更少的代码”时所指的主要原因是设计的清晰性和简单性。在具有局部变量和自动存储等功能的语言中,使用这些功能比将所有内容构建到自有堆栈中要自然得多。(毕竟,为什么要使用函数?为什么不使用if/elsewhile作为唯一的控制结构来编写整个程序?)

另一个考虑因素是性能,尤其是在多线程环境中。递归——取决于语言——可能会使用堆栈(注意:你说“在内部创建一个堆栈”,但实际上,它使用此类语言中的程序总是拥有的堆栈),而手动堆栈结构将需要动态内存allocation,这通常会导致明显的性能损失——更不用说确保在您(例如)遇到异常时释放所有内存所增加的复杂性。

  • 您为使用系统堆栈的性能所做的权衡是,与使用堆上的堆栈数据结构相比,系统堆栈的递归深度通常受到更多限制,因为堆要大得多。 (5认同)