这是一个普通的旧递归函数:
int fak(int n)
{
return (n <= 1) ? 1 : n * fak(n - 1);
}
我如何将这样的递归函数写为lambda函数?
[](int n) { return (n <= 1) ? 1 : n * operator()(n - 1); }
// error: operator() not defined
[](int n) { return (n <= 1) ? 1 : n * (*this)(n - 1); }
// error: this wasn't captured for this lambda function
是否有表示当前lambda的表达式,因此它可以递归调用自身?
答案 0 :(得分:110)
是的,他们可以。您可以将其存储在变量中并引用该变量(尽管您不能将该变量的类型声明为auto
,但您必须使用std::function
对象)。例如:
std::function<int (int)> factorial = [&] (int i)
{
return (i == 1) ? 1 : i * factorial(i - 1);
};
否则,不,你不能从lambda体内引用this
指针。