递归程序在内部创建一个堆栈,并导致用户编写更少的代码。
除了上述原因之外,是否有任何情况下递归实际上优于手动堆栈?
编辑 1:
动态内存分配比递归程序在堆上分配更“昂贵”的方式是什么?
最佳答案
我认为您在说“更少的代码”时所指的主要原因是设计的清晰性和简单性。在具有局部变量和自动存储等功能的语言中,使用这些功能比将所有内容构建到自有堆栈中要自然得多。 (毕竟,为什么要使用函数?为什么不使用 if
/else
和 while
作为唯一的控制结构来编写整个程序?)
另一个考虑因素是性能,尤其是在多线程环境中。递归——取决于语言——可能使用 the stack (注意:您说“在内部创建堆栈”,但实际上,它使用此类语言中的程序始终具有的堆栈),而手动堆栈结构则需要 dynamic memory allocation ,这通常会导致明显的性能损失——更不用说确保在您(例如)遇到异常时释放所有内存所增加的复杂性。
关于performance - 递归与手动堆栈 - 在哪种情况下首选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9106702/