Fibonacci序列(递归-傻孩子版)

Fibonacci序列(递归-傻孩子版)
  ( 源程序包在QQ群中 号码7972471,开发环境是VC.net 2003,另外很抱歉,我实在不想把它翻译成中文,太别扭了,鸡肠子没学好的多包含呀 )

  所谓Fibonacci序列是指的下面这样一种序列
    1,1,2,3,5,8,13,21,34.......
  发现它们的规律了吗?呵呵,对,除了前两个数外,所有数都是前两个数字的和,这在很多IQ测试题里都有的哦~你的智商测试又能多拿两分了。而且,这种序列能表示自然界中很多种优美的曲线,最熟悉的应该是我们经常能看见的海螺的曲线了。想到了么?就是螺旋曲线!
  它可以用下面的方程来表示:
          ┏ 1     n = 0
  F(n) = ┫ 1     n = 1
          ┗ F(n-1) + F(n-2)  n > 1

  知道什么是递归吗?真不知道?那你该趁大学生毕业,去找他们收购几本二手课本好好恶补一下了。简单的说,就是自己调用自己来解决问题,看看上面的方程就知道了,例如F(3) = F(2) + F(1),而 F(2) = F(1) + F(0), Bingo!所以说最终的答案就是 3 了!
  源代码中示范了一个使用递归算法来求解Fibonacci数列的例子:如果本身解决不了这个问题,但是解决这个问题的前提已知则能求解这个问题的话,便把这个问题转换成求解这些前提的问题。而如若恰巧其前提又是这个问题本身,于是就造成了一种循环的递归调用。直到遇到一个确切的结果定义而返回,答案便逆流而上返回给问题的调用者.
  这种解决方案的好处就是简单,是的,相当简单,几乎不经过任何思考,就可以简单地完成求解.但是中学政治老师没教过你矛盾论吗?当然还有两面性的道理罗,使用这么简单的算法所要承受的是时间和空间(存储空间)上的限制了。也许是我的机器已经被我蹂躏得跑不动了吧,在n=40左右的时候它已经慢得让我想把它卖给路边10元收购旧电脑的家伙了,但是无奈我还没想好要买什么,所以暂时让它继续跑会吧:P

程序代码片段:
// Fibonacci_t 是我定义的一个数据类型,暂时是__int64
 Fibonacci_t Fibonacci_Recursion::Caculate( int n )
 {
         return n<=1? 1 : Caculate( n-2 ) + Caculate( n-1 );
 }


这是DEBUG版本 n=25到n=40的数据 单位:毫秒
F(25)=121393             Time elapsed:15
F(26)=196418             Time elapsed:16
F(27)=317811             Time elapsed:16
F(28)=514229             Time elapsed:47
F(29)=832040             Time elapsed:62
F(30)=1346269            Time elapsed:109
F(31)=2178309            Time elapsed:172
F(32)=3524578            Time elapsed:282
F(33)=5702887            Time elapsed:453
F(34)=9227465            Time elapsed:718
F(35)=14930352           Time elapsed:1172
F(36)=24157817           Time elapsed:1891
F(37)=39088169           Time elapsed:3047
F(38)=63245986           Time elapsed:4953
F(39)=102334155          Time elapsed:8000
F(40)=165580141          Time elapsed:12922

这是Release版本 n=25到n=40的数据 单位:毫秒
F(25)=121393             Time elapsed:0
F(26)=196418             Time elapsed:0
F(27)=317811             Time elapsed:0
F(28)=514229             Time elapsed:16
F(29)=832040             Time elapsed:0
F(30)=1346269            Time elapsed:31
F(31)=2178309            Time elapsed:31
F(32)=3524578            Time elapsed:47
F(33)=5702887            Time elapsed:78
F(34)=9227465            Time elapsed:125
F(35)=14930352           Time elapsed:219
F(36)=24157817           Time elapsed:328
F(37)=39088169           Time elapsed:563
F(38)=63245986           Time elapsed:875
F(39)=102334155          Time elapsed:1437
F(40)=165580141          Time elapsed:2328
    咳...你愿意花13秒的时间去等一个简单的运算结果吗?如果你愿意,那么我想你该改行了,趁着还有梦想和追求,赶紧换工作吧~软件研发不适合你的~呵呵~~~~开玩笑的,别拍我砖
    想要知道怎么改善?看Fibonacci的另一个算法吧. 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值