栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言题目:斐波那契数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言题目:斐波那契数

斐波那契数列是什么?就是第一个数+第二个数=第三个数

例如:1+1=2 1+2=3

110
11235813213455

所以该去怎么设计呢,正好这几天正在学递归,我就想用递归的方式先写

1.递归写法

那我们怎么去求呢,假设我想求第4个斐波那契数我可以先把第三个求出来,再把第二个求出来

然后加在一起就是第四个,第三个可以用第二个和第一个求出来,这样就可以实现递归写法

代码:

int Fin(int a)
{
	if(a <= 2)//当a<2的时,返回1
	{
		return 1;
	}
	else
	return Fin(a-1)+Fin(a-2);//求第4个斐波那契数可以先把第三个和第二个求出来
}
int main()
{
	int a = 0;
	int ret = 0;
	printf("请输入n");
	scanf("%d",&a);
	ret = Fin(a);
	printf("ret = %d",ret);

}

看来成功了,但是它有一个巨大的弊端,假设我想求第100个斐波那契数,我就要把第99个斐波那契数和第98个斐波那契数给求出来,而第99个斐波那契数又要求第98、97个。。。一直求下去需要很大的计算量,所以并不是所有的题目都适合用递归,要分清楚形势。

2.不递归

不递归的写法就是循环嘛,蛮简单的

代码:

int fin2(int num) {
	int a = 1;
	int b = 1;
	int c = 1;//初始值为1方便输出第一个第二个斐波那契数
	while (num > 2) {
		c = a + b;
		a = b;
		b = c;
		num--;
	}
	return c;
}
int main() {
	int num = 0;
	int ret = 0;
	printf("请输入n");
	scanf("%d", &num);
	ret = fin2(num);
	printf("ret = %dn", ret);
}

 不管它值是否溢出,但它算出来了

你学废了吗

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号