C# 中的匿名函数/递归

发布于 2024-11-26 15:57:12 字数 695 浏览 2 评论 0原文

谁能解释一下这段代码的行为(来自 http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx)。我不明白为什么最后一次调用显示为 18。

Func<int, int> fib = null;
fib = n => n > 1 ? fib( n - 1 ) + fib( n - 2 ) : n;
Func<int, int> fibCopy = fib;
Console.WriteLine( fib( 6 ) );                        // displays 8
Console.WriteLine( fibCopy( 6 ) );                    // displays 8
fib = n => n * 2;
Console.WriteLine( fib( 6 ) );                        // displays 12
Console.WriteLine( fibCopy( 6 ) );                    // displays 18

谢谢

Can anyone please explain the behavior of this piece of code(from http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx). I have not understood why does it display 18 for the last call.

Func<int, int> fib = null;
fib = n => n > 1 ? fib( n - 1 ) + fib( n - 2 ) : n;
Func<int, int> fibCopy = fib;
Console.WriteLine( fib( 6 ) );                        // displays 8
Console.WriteLine( fibCopy( 6 ) );                    // displays 8
fib = n => n * 2;
Console.WriteLine( fib( 6 ) );                        // displays 12
Console.WriteLine( fibCopy( 6 ) );                    // displays 18

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

季末如歌 2024-12-03 15:57:12

因为fibCopy仍然指向fib的原始定义:n => n> 1 ? fib( n - 1 ) + fib( n - 2 ) : n;。在该定义中,使用了fib。但fib已更改为n =>; n * 2 。

执行 fibCopy(6) 将执行以下命令:

6 > 1 ? ((6-1) * 2) + ((6-2) * 2) : 6;

因为 6 大于 1,所以将计算三元表达式的第一个分支:

(6-1) * 2 = 10
(6-2) * 2 =  8
           ---
            18

Because fibCopy still points to the original definition of fib: n => n > 1 ? fib( n - 1 ) + fib( n - 2 ) : n;. In that definition, fib is used. But fib has been changed to n => n * 2.

Executing fibCopy(6) will execute the following:

6 > 1 ? ((6-1) * 2) + ((6-2) * 2) : 6;

Because 6 is greater than 1, the first branch of the ternary expression will be evaluated:

(6-1) * 2 = 10
(6-2) * 2 =  8
           ---
            18
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文