重寫於過載的區別
斐波那契數列(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;
}