Aqu*_*irl 6 recursion performance stack recursive-datastructures data-structures
递归程序在内部创建堆栈,并使用户编写更少的代码.
除了上面提到的原因之外,是否有任何情况下递归实际上比手动堆栈更受欢迎?
动态内存分配以什么方式比递归程序在堆上的分配更"昂贵"?
我认为您在说“更少的代码”时所指的主要原因是设计的清晰性和简单性。在具有局部变量和自动存储等功能的语言中,使用这些功能比将所有内容构建到自有堆栈中要自然得多。(毕竟,为什么要使用函数?为什么不使用if/else和while作为唯一的控制结构来编写整个程序?)
另一个考虑因素是性能,尤其是在多线程环境中。递归——取决于语言——可能会使用堆栈(注意:你说“在内部创建一个堆栈”,但实际上,它使用此类语言中的程序总是拥有的堆栈),而手动堆栈结构将需要动态内存allocation,这通常会导致明显的性能损失——更不用说确保在您(例如)遇到异常时释放所有内存所增加的复杂性。