C# 中的匿名函数/递归
谁能解释一下这段代码的行为(来自 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为
fibCopy
仍然指向fib
的原始定义:n => n> 1 ? fib( n - 1 ) + fib( n - 2 ) : n;
。在该定义中,使用了fib
。但fib
已更改为n =>; n * 2 。
执行
fibCopy(6)
将执行以下命令:因为 6 大于 1,所以将计算三元表达式的第一个分支:
Because
fibCopy
still points to the original definition offib
:n => n > 1 ? fib( n - 1 ) + fib( n - 2 ) : n;
. In that definition,fib
is used. Butfib
has been changed ton => n * 2
.Executing
fibCopy(6)
will execute the following:Because 6 is greater than 1, the first branch of the ternary expression will be evaluated: