A little C# fun with Fibonacci

来源:互联网 发布:深圳单片机培训 编辑:程序博客网 时间:2024/06/04 19:56

上午来到实验室,打开VS 2008,看了看Start Page中RSS的一些文章,其中有一篇讲使用多种语言实现Fibonacci函数的post,包括比较了C# 2.0与C# 3.0在实现上的不同。

Post中提供了两种写法,首先是C# 2.0的

static int Fibonacci (int x)
{
   
if (x <= 1)
      
return 1;
   
return Fibonacci (x-1+ Fibonacci (x-2);
}

然后给出了使用C# 3.0的新泛型委托Func<>以及Lambda表达式的写法,看了这个的人不会觉得C#像Java吧

Func<intint> fib = null;
fib 
= (n => n > 1 ? fib(n - 1+ fib(n - 2) : n);

其实我们也可以定义自己的Func<>,like this

public delegate TResult SingleParmFunction<Tin, TResult>(Tin input);

这个定义正如同单参数的Func<>版本,于是同样可以定义出一个Fibonacci的函数

SingleParmFunction<intint> fib = null;
fib 
= (n => n > 1 ? fib(n - 1+ fib(n - 2) : n);

不过看明白了C# 3.0 Lambda表达式本质的人就应该知道其实C# 2.0完全不用写得如post中那样ws,使用匿名委托一样可以写得很精干,这里我还是用的自己定义的委托

SingleParmFunction<intint> fib = null;
fib 
= delegate(int n)
{
    
return n > 1 ? fib(n - 1+ fib(n - 2) : n;
};

相比较Lambda表达式,匿名委托只是还像一个我们都熟悉的method的定义,有括号,括号里头有参数,要使用return返回方法的执行结果,如此而已。

对我提到的那篇post有兴趣的,可以点击 http://www.hanselman.com/blog/TheWeeklySourceCode13FibonacciEdition.aspx