Highslide for Wordpress Plugin

十三世紀的義大利數學家費伯納西 (Fibonacci) 寫了一本商用的算術和代數手冊《Liber abacci》。在這本書裏,他提出了這麼一個有趣的問題:假定一對兔子在它們出生整整兩個月以後可以生一對小兔子,其後每隔一個月又可以再生一對小兔子。假定現在在一個籠子裡有一對剛生下來的小兔子,請問一年以後籠子裏應該有幾對兔子?

讓我們仔細地算一下,每個月份所有的兔子對數應該等於其上一個月所有的兔子對數(也就是原有的兔子對數)及其上上個月所有的兔子對數(這些兔子各生了一對小兔子)的總和。所以每個月的兔子對數應該是1、1、2、3、5、8、13、21、34、55、89、144、233、…,每一項都是前兩項之和。因此,一年後籠子裡應該有233 對兔子了。

這些兔子的數目我們稱之為費氏數(Fibonacci numbers)。為方便起見,我們用 Fn 表示第 n 代兔子的數目。

F1 = F2 = 1
而當 n≧3 時,Fn = Fn – 1 + Fn – 2

延伸閱讀:自然界中的費氏數

下面分別利用指標(非遞迴)跟利用函數呼叫(遞迴)的寫法來計算費氏數列

1.利用指標的寫法:

   1: #include<stdio.h>

   2: #include<stdlib.h>

   3: int main()

   4: {

   5:     int i,n;

   6:     printf("請輸入欲求至第幾項\n");

   7:     scanf("%d",&n);

   8:     int f[n];

   9:     /*指定f[0]=1;f[1]=1*/ 

  10:     *f=1;

  11:     *(f + 1)=1;

  12:     for(i=0;i<=n-3;i++)

  13:     {

  14:         *(f + (i+2))=*(f + i)+*(f + (i+1));

  15:         /*上述一行意思同:f[i+2]=f[i]+f[i+1];*/ 

  16:     }

  17:     for(i=0;i<n;i++)

  18:     {

  19:         printf("%d ",*(f + i));

  20:     }

  21:     printf("\n");

  22:     system("pause");

  23:     return 0;

  24: }

2.利用函數呼叫的寫法:

   1: #include<stdio.h>

   2: #include<stdlib.h>

   3: int Fibonacci(int n);

   4: int main()

   5: {

   6:     int i,n,f;

   7:     printf("請輸入想算出第幾個費氏數\n");

   8:     scanf("%d",&n);

   9:     f=Fibonacci(n);

  10:     printf("F[%d]=%d ",n,f);

  11:     printf("\n");

  12:     system("pause");

  13:     return 0;

  14: }

  15: int Fibonacci(int n)

  16: {

  17:     int f;

  18:     /*指定f[0]=0;f[1]=1*/ 

  19:     if(n==0)f=0;

  20:     else if(n==1)f=1;

  21:     /*f[n]=f[n-2]+f[n-1];*/

  22:     else if(n>=2)f=Fibonacci(n-2)+Fibonacci(n-1);

  23:     return f;

  24: }

以上程式碼效果是利用Windows Live Writer+Code Snippet所達成。

Related Posts with Thumbnails
留下迴響