斐波那契数列(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;
}