首页 新闻 会员 周边

递归调用需要保存哪些东西在栈里面?

0
[已解决问题] 解决于 2015-08-12 15:13

注:关于递归的所有形参和所有局部变量是否要保存, 如果一个局部变量对于下一次的递归调用没有用,这个也需要保存吗,还是说可以智能识别?

int f(int n)//求阶乘 
{
    int a, b;
    if(n == 1)
        return 1;
    return n * f(n-1);
}

比如这个求阶乘的, 变量a, b 完全没用, 需要保存吗?

ithan的主页 ithan | 菜鸟二级 | 园豆:234
提问于:2015-08-11 17:50
< >
分享
最佳答案
0

就你这段代码,不管是不是递归,a,b 就已经被编译器优化掉了。如果禁止编译器优化,不管你是不是递归,都会保存在调用栈上。这是 C 文法层面上的东西,你是要开发编译器吗?

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2015-08-11 18:07

没有,我是想写出高效的递归程序来,补一句:学了编译原理,就可以开发编译器了吗?

ithan | 园豆:234 (菜鸟二级) | 2015-08-11 19:12

@ithan: 不学也可以。

Launcher | 园豆:45045 (高人七级) | 2015-08-12 09:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册