首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >lambda函数可以是递归的吗?

lambda函数可以是递归的吗?
EN

Stack Overflow用户
提问于 2013-01-26 07:32:00
回答 1查看 28.5K关注 0票数 82

可能重复:

Recursive lambda functions in c++0x

下面是一个普通的老式递归函数:

代码语言:javascript
复制
int fak(int n)
{
    return (n <= 1) ? 1 : n * fak(n - 1);
}

我如何编写这样的递归函数作为lambda函数呢?

代码语言:javascript
复制
[](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,这样它就可以递归地调用自己?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-26 07:38:19

是的,他们可以。您可以将其存储在一个变量中并引用该变量(尽管不能将该变量的类型声明为auto,但必须使用std::function对象)。例如:

代码语言:javascript
复制
std::function<int (int)> factorial = [&] (int i) 
{ 
    return (i == 1) ? 1 : i * factorial(i - 1); 
};

否则,您不能从lambda的主体内部引用this指针。

票数 114
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14531993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档