斐波纳契数列
1,1,2,3,5,8,13,21,34,55,89……这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。
输入
一个整数N(N不能大于40)
输出
由N个“斐波纳契数”组成的“斐波纳契数列”。
样例输入复制
6
样例输出复制
1 1 2 3 5 8
方法一:
#include<stdio.h>
int main(void)
{
int N,A=1,B=1,C;
scanf("%d",&N);
if(N==1)
printf("1");
if(N==2)
printf("1 1");
if(N>2)
{
printf("1 1 ");
for(int i=0;i<=N-4;i++)
{
printf("%d ",A+B);
C=A;
A=B;
B=B+C;
}
printf("%d",A+B);
}
return 0;
}
方法二(递归):
#include<stdio.h>
int feibonaqi(int n)
{
if(n<=2)
{
return 1;
}
return feibonaqi(n-1)+feibonaqi(n-2);
}
int main(void)
{
int N,i;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
printf("%d ",feibonaqi(i));
}
return 0;
}
递归是一直调用自己的函数直到满足条件为止,它比较消耗内存和时间,输入的值过大它算的很慢,因为它需要把前面的值都算一遍。
方法三(迭代):
#include<stdio.h>
int feibonaqi(int n)
{
int result,per_result=1,per_per_result=1;
if(n<=2)
{
return 1;
}
while(n>2)
{
result=per_per_result+per_result;
per_per_result=per_result;
per_result=result;
n--;
}
return result;
}
int main(void)
{
int N,i;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
printf("%d ",feibonaqi(i));
}
return 0;
}
迭代法比较省时间,就是由旧值推送给新值的变量。