【发布时间】:2011-04-29 20:17:22
【问题描述】:
大约 15 年前,我第一次接受了认真的 C 语言培训。我的雇主需要高度优化的代码来完成计算困难的任务。我记得不止一次被建议将递归重写为循环,即使以牺牲可读性为代价,以避免“递归开销”。正如我当时所理解的那样,递归开销是将数据推送到堆栈然后将其弹出所需的额外工作。
现在我用 C、Python、Perl 和 Java 编写代码,有时我想知道递归。重写它们还有什么好处吗?如果它们是尾递归怎么办?现代编译器是否已经解决了所有这些问题?这些问题与解释语言无关吗?
【问题讨论】:
-
函数调用开销在不同系统之间可能会有很大差异,因此这个问题仅在特定上下文中才有意义。也就是说,我认为过去几十年的总体趋势是减少开销。
标签: optimization programming-languages recursion tail-recursion interpreted-language