Python开启尾递归优化!

呃, 所以呢? 是不是感觉还不够过瘾... 谁说尾递归调用就不用创建新的栈呢?

还是让我们去底层一探究竟吧

int tail_recursion(int n, int total) {    if (n == 0) {        return total;    }    else {        return tail_recursion(n-1, total+n);    }}int main(void) {    int total = 0, n = 4;    tail_recursion(n, total);    return 0;}

反汇编

  • $ gcc -S tail_recursion.c -o normal_recursion.S

  • $ gcc -S -O2 tail_recursion.c -o tail_recursion.S gcc开启尾递归优化

对比反汇编代码如下(AT&T语法)

可以看到, 开启尾递归优化前, 使用call调用函数, 创建了新的调用栈(LBB0_3);