算法描述:
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前20个月的数量)
输出格式:
输出20个数字,
思路:
斐波那契数列(Fibonacci sequence),又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。就是前两个数的和等于第三个数的值。
程序代码:
- 非递归方式:
#include<stdio.h>
int main(){
int n1,n2;
n1=n2=1;
for(int i=0;i<10;i++){
printf("%d\n",n1);
printf("%d\n",n2);
n1=n1+n2;
n2=n2+n1;
}
return 0;
}
- 递归方式:
#include<stdio.h>
int Fibon(int n){
if(n==1||n==2){
return 1;
}else{
return Fibon(n-1)+Fibon(n-2);
}
}
int main(){
for(int i=1;i<=20;i++){
printf("%d\n",Fibon(i));
}
return 0;
}
- 数组表示
#include<stdio.h>
int main(){
int a[20]={0};
a[0]=a[1]=1;
for(int i=2;i<20;i++){
a[i]=a[i-1]+a[i-2];
}
for(int i=1;i<20;i++){
printf("%d\n",a[i]);
}
return 0;
}
运行结果: