【C】斐波纳契数列

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

迭代法比较省时间,就是由旧值推送给新值的变量。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值