Tag: 尾调用优化

GCC的尾部呼叫优化有多“聪明”?

我刚刚讨论了以下两个C代码的讨论: for循环: #include #define n (196607) int main() { long loop; int count=0; for (loop=0;loop<n;loop++) { count++; } printf("Result = %d\n",count); return 0; } 递归: #include #define n (196607) long recursive(long loop) { return (loop>0) ? recursive(loop-1)+1: 0; } int main() { long result; result = recursive(n); printf(“Result = %d\n”,result); return 0; } 在看到这段代码时,我看到了recursive(loop-1)+1并认为“啊,这不是尾调用递归”,因为它在完成对recursive的调用之后还有工作要做; 它需要增加返回值。 […]