注:关于递归的所有形参和所有局部变量是否要保存, 如果一个局部变量对于下一次的递归调用没有用,这个也需要保存吗,还是说可以智能识别?
int f(int n)//求阶乘 { int a, b; if(n == 1) return 1; return n * f(n-1); }
比如这个求阶乘的, 变量a, b 完全没用, 需要保存吗?
就你这段代码,不管是不是递归,a,b 就已经被编译器优化掉了。如果禁止编译器优化,不管你是不是递归,都会保存在调用栈上。这是 C 文法层面上的东西,你是要开发编译器吗?
没有,我是想写出高效的递归程序来,补一句:学了编译原理,就可以开发编译器了吗?
@ithan: 不学也可以。