lambda函数可以是递归的? [重复](Can lambda functions be rec

2019-07-18 17:58发布

可能重复:
C ++ 0x中递归lambda函数

这是一个普通的老递归函数:

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

是否有表示当前拉姆达因此它可以递归调用本身的任何表达?

Answer 1:

是的他们可以。 您可以将其存储在一个变量和参考变量(虽然你不能声明变量的类型auto ,你将不得不使用std::function对象,而不是)。 例如:

std::function<int (int)> factorial = [&] (int i) 
{ 
    return (i == 1) ? 1 : i * factorial(i - 1); 
};

否则,不,你不能引用了this从拉姆达的身体内部指针。



文章来源: Can lambda functions be recursive? [duplicate]