As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center作为指导。
6年前关闭。
假设我有一个递归函数,该递归函数在达到基本情况之前先调用了多次(例如阶乘),或者获取了一个值,以开始展开其余部分。编译器会将此优化为与我以迭代格式编写该函数相同的代码吗?
6年前关闭。
假设我有一个递归函数,该递归函数在达到基本情况之前先调用了多次(例如阶乘),或者获取了一个值,以开始展开其余部分。编译器会将此优化为与我以迭代格式编写该函数相同的代码吗?
最佳答案
答案是“也许”。但是,如果您确实要确保编译器没有使函数真正递归,则必须迭代编写。
许多编译器可以检测“尾递归”并将其转换为循环。但并非总是如此,而且效率并不总是像您自己将其作为迭代函数编写时一样。
对于更复杂的情况,例如Fibonacci系列(这不是简单的尾递归函数),编译器通常很难真正意识到正在发生的事情,并且必须求助于使其真正递归,即使是这样。使迭代变得非常琐碎。 [当我在递归方法中尝试斐波那契时,我的结果比迭代方法差很多-表示编译器没有解决它-并且正在使用gcc
,这在这些方面通常很聪明。
关于c++ - 编译器中的C++迭代与递归优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15975965/