A little C# fun with Fibonacci

上午来到实验室,打开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 < int int >  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 < int int >  fib  =   null ;
fib 
=  (n  =>  n  >   1   ?  fib(n  -   1 +  fib(n  -   2 ) : n);

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

SingleParmFunction < int int >  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
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值