斐波那契數(JAVA實現)
- public class Fibonacci {
- /*輸出斐波那契數*/
- publicstaticvoid printFibonacciNumber(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers
- for(int i = 1;i <= n;i++){
- System.out.print(f1+" "+f2+" ");//先輸出前兩個數
- if(i % 5 == 0)System.out.print("\n"); //換行
-
f1 = f1+f2; //計算下兩個數
- f2 = f1+f2;
- }
- /*後數除前數為黃金分割點*/
- System.out.print("\n"+"-------------------------------------"+"\n");
- System.out.println((double)f2/f1);//越到後邊,後數除前數越接近黃金分割點
- }
- /*輸出斐波那契陣列*/
-
publicstaticvoid printFibonacciArray(long f1,long f2,int n){//the first number, the second number,the totel fibonacci numbers
- long f[] = newlong[n];
- f[0]=f1;
- f[1]=f2;
- for(int i =2;i <n;i++){
- f[i]=f[i-2]+f[i-1]; //陣列的第三個數開始為前兩個數的和
- }
- System.out.println("-------------------------------------"+"\n");
-
System.out.println(java.util.Arrays.toString(f)); //把陣列轉化成String輸出
- }
- /**
- * main method
- * @param args
- */
- publicstaticvoid main(String[] args) {
- Fibonacci.printFibonacciNumber(0, 1, 10);//print the 20 advanced fibonacci number
- Fibonacci.printFibonacciArray(0, 1, 20);
- }
- }
輸出結果:
0 1 1 2 3 5 8 13 21 34
------------------------------------- [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181] |
小知識(摘錄):
斐波那契是義大利的數學家。他是一個商人的兒子。兒童時代跟隨父親到了阿爾及利亞,在那裡學到了許多阿拉伯的算術和代數知識,從而對數學產生了濃厚的興趣。
長大以後,因為商業貿易關係,他走遍了許多國家,到過埃及、敘利亞、希臘、西西里和法蘭西。每到一處他都留心蒐集數學知識。回國後,他把蒐集到的算術和代數材料,進行研究、整理,編寫成一本書,取名為《算盤之書》,於1202年正式出版。
這本書是歐洲人從亞洲學來的算術和代數知識的整理和總結,它推動了歐洲數學的發展。其中有一道“兔子數目”的問題是這樣的:一個人到集市上買了一對小兔子,一個月後,這對小兔子長成一對大兔子。然後這對大兔子每過一個月就可以生一對小兔子,而每對小兔子也都是經過一個月可以長成大兔子,長成大兔後也是每經過一個月就可以生一對小兔子。那麼,從此人在市場上買回那對小兔子算起,每個月後,他擁有多少對小兔子和多少對大兔子?
這是一個有趣的問題。當你將小兔子和大兔子的對數算出以後,你將發現這是一個很有規律的數列,而且這個數列與一些自然現象有關。人們為了紀念這位兔子問題的創始人,就把這個數列稱為“斐波那契數列”。
又找到了這麼一段話:
規律表:
月數 小兔 中兔 老兔 總數
1 1 0 0 1
2 0 1 0 1
3 1 0 1 2
4 1 1 1 3
5 2 1 2 5
6 3 2 3 8
7 5 3 5 13
在計算每一行時,大兔數為上月的大兔數加上月的中兔數,中兔數為上月的小兔數,小兔數為本月的大兔數,算總數為本月的小兔數加本月的中兔數加本月的大兔數。在觀察總數的過程中找出了規律:總數的第一、二月都是1,以後的每一月是前兩月的和。數列為1,1,2,3,5,8,13,21,34,55,……
當n=50時,後項與前項的比是1.61803398874989,而前項與後項的比是0.61803398874989,即b/a的值與a/b的值相差1,假設後項與前項的比是φ,則有(φ-1)/φ=1,解這個方程得:φ= (√5+1) /2,這就是黃金分割。
當n充分大時,斐波納契數列後前項的比值,與前後項的比值,相差1,它們的比值是黃金分割!黃金分割是一個十分有用的無理數。據此,把黃金分割可用一個有理數近似表示,如斐波納契數列的第七項與斐波納契數列的第六項的比13/8,斐波納契數列的第九項與斐波納契數列的第八項的比34/21等都可以近似地表示為黃金分割,當然項數越後越精確。