lambda函数可以recursion吗?
可能重复:
recursionlambda函数在c + + 0x
这是一个普通的旧recursion函数:
int fak(int n) { return (n <= 1) ? 1 : n * fak(n - 1); }
我如何写一个这样的recursion函数作为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
有没有表示当前的lambdaexpression式,所以它可以调用自己recursion?
是的他们可以。 你可以把它存储在一个variables中并引用这个variables(尽pipe你不能将这个variables的types声明为auto
,你必须改用std::function
对象)。 例如:
std::function<int (int)> factorial = [&] (int i) { return (i == 1) ? 1 : i * factorial(i - 1); };
否则,不,你不能从lambda体内引用this
指针。