一般的递归会导致递归调用栈的产生,深层递归下去将导致效率的下降,然而,部分递归问题是尾调用(Tail Call)的特殊形式,因而可以利用编译器进行优化,避免递归调用栈的产生,最常见的阶乘函数的尾递归写法如下:
int fact(int n){
std::function<int(int)> k = [](int x) { return x; };
for(;;){
if (n == 0)
return k(1);
else{
k = [=](int x) { return k(x * n); };
--n;
}
}
}