談到斐波那契數列,可能是算法中經典的算法之一了。讓我們先來看看斐波那契數列的由來:
Fibonacci’s original question:
1.Suppose that you are given a newly-born pair of rabbits, one male, one female.
2.Rabbits are able to mate at the age of one month so that at the end of its second month a female can produce another pair of rabbits.
3.Suppose that our rabbits never die.
4.Suppose that the female always produces one new pair (one male, one female) every month.
在不考慮任何其他因素的情況下,我們認定每一只兔子在出生后的第一個月結束時,可以和其他任意異性兔子進行交配,並產下兩只一雄一雌的小兔子。由此產生的每個月的兔子的對數即為斐波那契數列。
由此,我們可以得出斐波那契數列的運算公式:
通過這個公式我們可以用C++很容易的寫出求斐波那契數列中第N個數的算法代碼:
1 int fibonacci(int n) { 2 if (n == 0) 3 return 0; 4 if (n == 1) 5 return 1; 6 return fibonacci(n - 1) + fibonacci(n - 2); 7 }
算法雖然很簡單,但是這個算法並不常用。因為當N很大時,遞歸的次數很高,浪費了很多時間,因此造成算法復雜度很高的局面。
但最神奇的是,自然界中卻存在着很多符合斐波那契數列的例子:
花瓣數中的斐波那契數:大多數植物的花,其花瓣數都恰是斐波那契數。例如,蘭花、茉利花、百合花有3個花瓣,毛茛屬的植物有5個花瓣,翠雀屬植物有8個花瓣,萬壽菊屬植物有13個花瓣,紫菀屬植物有21個花瓣,雛菊屬植物有34、55或89個花瓣。
向日葵花盤內,種子是按對數螺線排列的,有順時針轉和逆時針轉的兩組對數螺線。兩組螺線的條數往往成相繼的兩個斐波那契數,一般是34和55,大向日葵是89和144,還曾發現過一個更大的向日葵有144和233條螺線,它們都是相繼的兩個斐波那契數。