【发布时间】:2017-08-01 14:55:11
【问题描述】:
假设我有这样的功能:
int recursivefunction (int n) {
if (n>10) return n; /* terminal case */
elseif (n>5) return n*recursivefunction(n-1); /* non tail call*/
else return recursivefunction(n-1); /* tail call
第三次递归调用会被优化为尾调用吗?如果不是为什么不呢? 我们可以用一个清除当前函数堆栈帧的汇编代码替换第三个返回语句,除了传递给下一个调用的局部变量,以及指向函数地址的 goto,这样就不会保留堆栈上的空间。
【问题讨论】:
-
用
-O2 -fdump-tree-optimized编译,查看生成的file.c.226t.optimized(数字可能随gcc版本变化)...