c#扩展方法奇思妙用变态篇一:由Fibonacci数列引出“委托扩展”及“递推递归委托”
2010-09-30 20:46:16 来源:WEB开发网相信大家见的扩展大多针对类(object, string)、接口(IEnumerable<T>)进行扩展,针对Func(委托)估计对大多数人来说都是第一次。
这个扩展就是标题中说的“委托扩展”,感觉很怪吧,很别扭吧,很别管太多,看看怎么调用吧:
public static void Test1()
{
int[] ints1 = fun1.GetSequence(10).ToArray(); //1, 1, 1, 1
int[] ints2 = fun2.GetSequence(10).ToArray(); //0, 1, 2, 3
int[] ints3 = fun3.GetSequence(10).ToArray(); ; //0, 1, 4, 9
}
自我感觉比较简洁,而且将生成数列(GetSequence)与数列算法(通项公式)分开,也达到了生成数列(GetSequence)的复用。
上面几个数列比较简单,现在来看Fibonacci,
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55...
用图形表示如下:
这个序列在大家学习c语言递推递归时都接触过,这个序列很神奇,请参看维基百科:斐波那契数列
它的通项公式是 An = F(n) = n n =0, 1
F(n-1) + F(n-2) n>1
注意:关于这数列有的是从n从0开始,有的是从1开始,这里不计较。
递推递归算法如下,容易理解效率确很低!!
public static int GetFibonacci(int n)
{
if (n > 1) return GetFibonacci(n - 1) + GetFibonacci(n - 2);
else return n;
}
- ››扩展Axis2框架,支持基于JVM的脚本语言
- ››扩展WebSphere Portal V6个性化功能
- ››扩展JavaScript的时候,千万要保留其原来的所有功...
- ››扩展数据:如何为 Model 750 服务器选择 I/O 扩展...
- ››扩展 JDT 实现自动代码注释与格式化
- ››扩展 secldap 的功能以验证多个数据源
- ››扩展 JUnit4 以促进测试驱动开发
- ››扩展 JUnit 测试并行程序
- ››扩展的ToolStripEx控件
- ››扩展 Eclipse 的 Java 开发工具
- ››扩展 Eclipse 辅助和规范开发流程
- ››扩展方法 DataTable 和List 相互转换
更多精彩
赞助商链接