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指针。