c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”
2009-08-10 09:06
357 查看
先回顾一个数列的概念:按一定次序排列的一列 数 称为数列...(请参见百度百科:数列)
几个简单的数列:
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表达式是不是与数学公式很像啊!
再来看生成算法,这里用了一个不一般的扩展:
public static IEnumerable<int> GetSequence(this Func<int, int> func, int count)
public static void Test9()
{
//测试 generate3
Point p3 = g3(new Point(0, 1), 3);
for (int i = 0; i < 12; i++)
Console.WriteLine(g3(new Point(1,0), i));
}
几种算法的优点和缺点大家来评判吧!
本人系列文章《c#扩展方法奇思妙用》,敬请关注!
几个简单的数列:
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表达式是不是与数学公式很像啊!
再来看生成算法,这里用了一个不一般的扩展:
public static IEnumerable<int> GetSequence(this Func<int, int> func, int count)
public static void Test9()
{
//测试 generate3
Point p3 = g3(new Point(0, 1), 3);
for (int i = 0; i < 12; i++)
Console.WriteLine(g3(new Point(1,0), i));
}
几种算法的优点和缺点大家来评判吧!
本人系列文章《c#扩展方法奇思妙用》,敬请关注!
相关文章推荐
- c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”
- c# 扩展方法奇思妙用变态篇一:由 Fibonacci 数列引出 “委托扩展” 及 “递推递归委托”
- c#扩展方法奇思妙用变态篇一:由Fibonacci数列引出“委托扩展”及“递推递归委托”
- c#扩展方法奇思妙用变态篇一:由Fibonacci数列引出“委托扩展”及“递推递归委托”
- c# 扩展方法奇思妙用变态篇四:string 的翻身革命
- c#扩展方法奇思妙用变态篇四:string 的翻身革命
- c#扩展方法奇思妙用变态篇三:switch/case组扩展
- c# 扩展方法奇思妙用变态篇四:string 的翻身革命
- c#扩展方法奇思妙用变态篇四:string 的翻身革命
- 艾伟_转载:c#扩展方法奇思妙用变态篇四:string 的翻身革命
- c#扩展方法奇思妙用变态篇二:封装 if/else、swith/case及while
- c#扩展方法奇思妙用高级篇四:对扩展进行分组管理
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展
- c# 扩展方法奇思妙用基础篇三:byte 常用扩展
- c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 "In" 扩展
- c# 扩展方法奇思妙用
- c# 扩展方法奇思妙用基础:Dictionary<TKey, TValue> 扩展
- c#扩展方法奇思妙用基础篇三:byte 常用扩展
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展
- c# 扩展方法奇思妙用基础篇八:Distinct 扩展