`
guanjh
  • 浏览: 229148 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

菲波拉契数列

阅读更多
13世纪初,欧洲最好的数学家是斐波拉契(Fibonacci,又译菲波拉契);他写了一本叫做《算盘书》的著作,是当时欧洲最好的数学书。书中有许多有趣的数学题,其中最有趣的是下面这个题目:
“如果一对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月里,又能开始生1对小兔子,假定在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖成多少对兔子?”
斐波拉契把推算得到的头几个数摆成一串:
1,1,2,3,5,8……
这串数里隐含著一个规律:从第3个数起,后面的每个数都是它前面那两个数的和。而根据这个规律,只要作一些简单的加法,就能推算出以后各个月兔子的数目了。
按照这个规律推算出来的数,构成了数学史上一个有名的数列。大家都叫它“斐波拉契数列”。这个数列有许多奇特的的性质,例如,从第3个数起,每个数与它后面那个数的比值,都很接近于[url]0.618[/url],正好与大名鼎鼎的“黄金分割律”相吻合。人们还发现,连一些生物的生长规律,在某种假定下也可由这个数列来刻画呢。

Java实现:

java 代码
 
  1. public class Fibonacci {  
  2.   
  3.     /** 
  4.      * 基于一般变量方式实现 
  5.      */  
  6.     void fib() {  
  7.         int i = 1, k = 1;  
  8.   
  9.         do {  
  10.             i = i + k;  
  11.             k = k + i;  
  12.             System.out.printf("%d\t%d\t", i, k);  
  13.         } while (k <= 32000);  
  14.         System.out.println();  
  15.     }  
  16.       
  17.     /** 
  18.      * 基于数组方式实现 
  19.      */  
  20.     void fib2() {  
  21.         int a[] = new int[20];  
  22.           
  23.         a[0] = a[1] = 1;  
  24.         for (int k = 2; k < a.length; k++) {  
  25.             a[k] = a[k-1] + a[k-2];  
  26.             System.out.printf("%d\t", a[k]);  
  27.         }  
  28.         System.out.println();  
  29.     }  
  30.       
  31.     /** 
  32.      * 基于递归的方式实现 
  33.      */  
  34.     int fib3(int i) {  
  35.         if (i < 1) {  
  36.             return 0;  
  37.         }  
  38.           
  39.         if (i==1||i==2) {  
  40.             return 1;  
  41.         }  
  42.           
  43.         return fib3(i - 1) + fib3(i - 2);  
  44.     }  
  45. }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics