【发布时间】:2013-06-12 17:56:18
【问题描述】:
尾调用优化是否适用于对返回 void 的函数的递归调用?例如我有一个函数,void fun()
void fun()
{
...
...
...
fun();
}
这里编译器不会知道,调用 fun() 是最后一条语句。那么尾调用优化是否只针对返回一些值的函数?
【问题讨论】:
-
取决于编译器。你用的是哪一个?
-
@RogerLipscombe GCC。但是无论我使用哪个编译器,编译器如何知道它是最后一条语句?没有像函数返回某个值的情况那样显式返回,比如返回 int..
-
我想知道,返回类型会有什么不同?我的猜测是尾部优化将在这种情况下起作用
-
编译器可以推断它是最后一个语句,因为它紧跟在右大括号之后。
-
@shar 如果没有显式返回,递归什么时候结束?