說明:
Fibonacci爲1200年代的歐洲數學家,在他的著作中曾經提到:若有一隻免子每個月生一隻小免子,一個月後小免子也開始生產。起初只有一隻免子,一個月後就有兩隻免子,二個月後有三隻免子,三個月後有五隻免子(小免子投入生產)......。 如果不太理解這個例子的話,舉個圖就知道了,注意新生的小免子需一個月成長期纔會投入生產,類似的道理也可以用於植物的生長,這就是Fibonacci數列,一般習慣稱之爲費氏數列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89......
分析:
如果單從數學上找費氏數列的規律時,很容易發現當n>=2時,f(n)=f(n-1)+f(n-2)。但是如果從邏輯上分析,爲什麼會有這個規律呢?其實很簡單,由於第n個月的兔子=上一個月的兔子數量+這個月新出生的兔子數量。上一個月的兔子的數量爲f(n-1),那這個月新生出的兔子數量是多少呢,那就是上上個月的兔子的數量,因爲只有在上上個月就已經存在的兔子,這個月才能生兔子,因此新出生的兔子的數量就是f(n-2)。
實現:
/****************************************************************
Name: GossipAlgorithm.c
Description: the problem is a classical recursion problem
Author: [email protected]
Time: 2014-9-12
****************************************************************/
#include <stdio.h>
const int MAX_SIZE=20;
int main()
{
int arrayGossip[MAX_SIZE];
arrayGossip[0]=0; /** the first element of array is 0 */
arrayGossip[1]=1;
for(int i=2;i<MAX_SIZE;i++)
{
arrayGossip[i]=arrayGossip[i-1]+arrayGossip[i-2];
}
for(int i=0;i<MAX_SIZE;i++)
{
printf("%d\n",arrayGossip[i]);
}
return 0;
}
總結:
費氏數列從數學上很容易找出它的規律,但是如果要從邏輯上理解,就得稍微思考一下了。