C语言求第n个斐波那契数

#include<stdio.h>
//1.递归
//int fibonacci(int input)
//{
//	if (input < 3)
//		return 1;
//	else
//		return fibonacci(input - 1) + fibonacci(input - 2);
//	//return input < 2 ? input : fibonacci(input - 1)+fibonacci(input-2);
//}
//2.函数
int fibonacci(int input)
{
	if (input < 3)
		return 1;
	int a = 1, b = 1, i;
	for (i = 3; i <= input; i++)
	{
		int tmp = a + b;
		a = b;
		b = tmp;
	}
	return b;
}
int main()
{
	int input;
	printf("请输入求第几个斐波那契数:>");
	scanf("%d", &input);
	int ret = fibonacci(input);
	printf("第%d个斐波那契数是:%d", input, ret);
	return 0;
}

斐波那契数列:1,1,2,3,5,8,13,21,34,55......在第三个数之后,每个数是前两个数加起来组成的数列就是斐波那契数列

1.递归

比如说要求第5个斐波那契数,就要先找第4,3个斐波那契数,而找第4个斐波那契数就要先找第3,2个斐波那契数,找第3个斐波那契数就要先找第1,2个斐波那契数,显而易见,随着要找的斐波那契数的增大,递归的次数就越多,比如说找第50个斐波那契数,一时半会是不会得到的

它就会像这样不动,一直在进行运算, 所以可以看出,递归用来计算过大的斐波那契数列是不合适的,时间复杂度较大,但是比较节省空间。

最终得出的值是个负数是因为他的真实值超出了int的范畴,按二进制形式就会导致输出的值是个负数,可以使用longlong计算 

2.函数

使用函数的思想就是把要求的那个斐波那契数之前的都求一遍即可

 使用这种方法即使是求第100个斐波那契数也能很快就求出来,但是会使用空间,也就是说以空间换时间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值