1. 程式人生 > 實用技巧 >重寫於過載的區別

重寫於過載的區別

技術標籤:演算法基礎c語言演算法

斐波那契數列(C語言)

描述:斐波那契數列(Fibonacci sequence),指的是這樣一個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n ≥ 2,n ∈ N*)

具體展開:斐波那契數列可以衍生為一些實際問題,比如爬樓梯問題和兔子繁殖問題

爬樓梯問題:小明爬樓梯,他一次可以爬1階樓梯或者2階樓梯。如果爬1階樓梯,共有1種方法;爬2階樓梯,共有2種方法;爬3階樓梯,共有3種方法;爬4階樓梯,共有5種方法…如果爬n階樓梯,共有多少種方法?這顯然是一個斐波那契數列,F(n)=F(n-1)+F(n-2)。同時也可以這樣理解:如果要爬到n階,那麼這個人必須先爬到n-1階或者n-2階。如果爬到n-1階,那麼只需要一次爬1階就可以到達n階;如果爬到n-2階,那麼只需要一次爬2階就可以到達n階。所以,爬到n階的方法=爬到n-1階的方法+爬到n-2階的方法。

兔子繁殖問題:有1只兔子,從出生後第3個月起每個月都生1只兔子,小兔子長到第3個月後每個月又生1只兔子,假如兔子都不死,問每個月的兔子總數為多少?
第1個月,有1只兔子;第2個月,有1只兔子;第3個月,有2只兔子;第4個月,有3只兔子;第5個月,有5只兔子…這顯然又是一個斐波那契數列,F(n)=F(n-1)+F(n-2)。同時也可以這麼理解:要求第n個月的兔子,首先第n-1個月的兔子在第n個月全部活著,即有F(n-2)只兔子。而對於第n-2個月的兔子,一部分是最新出生的兔子(第n個月就是他們的第3個月),一部分是老兔子。所以第n-2個月的所有兔子都在第n個月生1只兔子,即有F(n-2)只兔子。最終可以得到F(n)=F(n-1)+F(n-2)。

以下是具體程式碼:

#include <stdio.h>
int main()
{
    int i,n;
    int f[100];
    f[0]=f[1]=1;
    while((scanf("%d",&n)!=EOF))
    {
        for(i=2;i<=n;i++)
        {
            f[i]=f[i-2]+f[i-1];
        }
        printf("%d\n",f[n-1]);
    }
    return 0;
}