C#:使用 Lambda 的递归函数
以下内容无法编译:
Func<int, int> fac = n => (n <= 1) ? 1 : n * fac(n - 1);
局部变量“fac”可能不是 访问前初始化
如何使用 lambda 来创建递归函数?
[更新]
这里还有两个我觉得有趣的链接:
The below does not compile:
Func<int, int> fac = n => (n <= 1) ? 1 : n * fac(n - 1);
Local variable 'fac' might not be
initialized before accessing
How can you make a recursive function with lambdas?
[Update]
Here are also two links that I found interesting to read:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
C# 不支持这种特殊风格的函数作为单行声明。 您必须将声明和定义分成两行
This particular style of function is not supported by C# as a single line declaration. You have to separate out the declaration and definition into 2 lines
您必须先创建
fac
并稍后分配它(这非常无用,因为它依赖于多重分配)或使用所谓的Y 组合器
。示例:
但请注意,这可能有点难以阅读/理解。
You'll have to create
fac
first und assign it later (which is pretty unfunctional because it depends on multiple assignment) or use so calledY-combinators
.Example:
But note that this might be somewhat hard to read/understand.
从 C# 7.0 开始,您终于可以通过使用 本地函数 而不是 lambda。
Since C# 7.0 you finally can do a similar thing by using a local function instead of a lambda.