深入探索 Lambda 表达式与 LINQ 的强大功能
1. 斐波那契数列与记忆化技术
在计算斐波那契数列相关内容时,有一段代码用于输出斐波那契数列的相关信息:
"1/Fibonacci".PadRight(24), "Fibonacci Constant".PadRight(24) ); for( ulong i = 1; i <= 93; ++i ) { Console.WriteLine( "{0:D5}\t{1:D24}\t{2:F24}\t{3:F24}", i, fib(i), (1/(decimal)fib(i)), fibConstant(i) ); }这里使用委托来计算第 n 个倒数斐波那契常数。随着输入值x的增大,计算结果会越来越接近倒数斐波那契常数。需要注意的是,对fibConstant委托进行了记忆化处理。如果不这样做,在调用fibConstant时,随着x值的不断增大,递归调用可能会导致栈溢出。这表明记忆化技术是用堆空间换取栈空间。代码的每一行输出中间值,而最右侧列的数值是最值得关注的。计算在第 93 次迭代时停止,因为第 94 个斐波那契数会使ulong类型溢出,不过可以使用System.Numeric命名空间中的BigInteger来解决溢出问题,但这里第 9