WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用变态篇一:由Fibonacci数列引出... 阅读

c#扩展方法奇思妙用变态篇一:由Fibonacci数列引出“委托扩展”及“递推递归委托”

 2010-09-30 20:46:16 来源:WEB开发网   
核心提示:先回顾一个数列的概念:按一定次序排列的一列 数 称为数列...(请参见百度百科:数列)几个简单的数列: 1, 1, 1, 1, 1, 1, 1... //数列1 0, 1, 2, 3, 4, 5, 6, 7... //数列2 0, 1, 4, 9, 16, 25, 36, 49... //数列3通项公式的定义:数列的第

先回顾一个数列的概念:按一定次序排列的一列 数 称为数列...(请参见百度百科:数列)

几个简单的数列:

      1, 1, 1, 1, 1, 1, 1...                //数列1
      0, 1, 2, 3, 4, 5, 6, 7...                //数列2
      0, 1, 4, 9, 16, 25, 36, 49...        //数列3

通项公式的定义:数列的第n项与项的序数这间的关系,也就是数列生成算法

上面几个数列可表示为

       An = F(n) = 1
       An = F(n) = n
       An = F(n) = n * n

有了数列和通项公式的定义,我们的任务就好描述了:

用最简洁的代码描述通项公式,用最简洁算法生成数列的前N个数。

在此要求下,用常规代码是做不到简洁的,这里我们用lambda表达式描述通项公式:

        //数列1 通项公式
        public static Func<int, int> fun1 = n => 1;
        //数列2 通项公式
        public static Func<int, int> fun2 = n => n;
        //数列3 通项公式
        public static Func<int, int> fun3 = n => n * n;

lambda表达式是不是与数学公式很像啊!

再来看生成算法,这里用了一个不一般的扩展:

        /**//// <summary>
        /// 生成队列的前count项
        /// </summary>
        /// <param name="func">通项公式</param>
        /// <param name="count">生成的数量</param>
        /// <returns>队列前count项</returns>
        public static IEnumerable<int> GetSequence(this Func<int, int> func, int count)
        {
            for (int i = 0; i < count; i++) yield return func(i);
        }

1 2 3 4  下一页

Tags:扩展 方法 奇思

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接