斐波那契数列的两种解法

斐波那契数列对于很多人来说可能并不陌生。笔者最近经常遇到这道题,这里针对这道题总结一下。

在目前的状态下,笔者已经探索出了两种不同的解决方案:首先,我们可以回顾一下之前设计的一种较为简陋的解决方案。这种方案的设计并不尽如人意,其占用的空间较大,而且在时间效率上也没有任何优势可言。现在我还掌握了一种新的解决方案,这种方式大大节约了空间。这种新的方法让我感到非常惊喜,好了,现在让我们开始正文。

这里还是先把问题再描述一遍吧

一个数列An,a0=0,a1=1,an=an-1+an-2,求这个数列的前n项

解法一

先简单介绍一下思路:

这里我使用数组来存储这个数列,所以需要定义一个很大空间的数组,在定义完数组后,我们需要保证输入的n在数组范围内。然后直接使用循环,根据递归数列,从a2一直算到an输出就可以了,下面将代码贴出:

ini 复制代码
#include <iostream>
using namespace std;

int main() {
	long int n;
	long int i;
	long long int* a = new long long int[1000000];
	cin >> n;	
	if (n < 1 || n>1000000)return -1;
	
	a[0] = 1; a[1] = 1;
	cout << a[0] << ' ' << a[1] << ' ';
	for (i = 2; i <= n; i++)
	{
		a[i] = a[i - 1] + a[i - 2];
		cout << a[i] << ' ';
	}
	delete[] a;

	return 0;
}

解法二

这里同样先介绍一下思路:

这里使用两个变量轮流存储数据,如起始时a0=0,a1=1;这时令a0存储第三个数据,a1存储第四个数据,以此类推。我们可以发现规律,第1个数据不满足n%2==0,用a0存储;第2个数据满足n%2==0,用a1存储;第三个不满足用a0存储;第四个满足用a1存储......为了记录数据可以在生成一个新数据时进行输出,下面将源码贴出:

ini 复制代码
#include<iostream>

using namespace std;

int main()
{
	int a0 = 0, a1 = 1;
	int n;
	cin >> n;
	cout << a0 << ' ' << a1 << ' '<<endl;
	for (int i = 3; i <= n; i++)
	{
		if (i % 2 == 0)
		{
			a1 = a0 + a1;
			cout << a1 << ' ';
		}
		else
		{
			a0 = a1 + a0;
			cout << a0 << ' ';
		}
		if (i % 5 == 0)
			cout << endl;
	}
}

总结

两种方式的转变应该算得上是我的成长了吧,哈哈哈哈,不管怎么说,这两种方式应该各有优劣,当然我现在更倾向于第二种。最后感谢阅读!!!

相关推荐
卷福同学36 分钟前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
GetcharZp3 小时前
只需 10 分钟,轻松实现异地组网!Netmaker 保姆级部署教程来了
后端
前端兰博3 小时前
03-Spring Boot
后端
前端兰博4 小时前
01-Java开发基础语言
后端
前端兰博4 小时前
02-Servlet、JDBC、Maven、Mybatis
后端
咖啡八杯4 小时前
GoF设计模式——模板方法模式
java·后端·spring·设计模式
码事漫谈5 小时前
Loop 正在排斥人为操作
后端
爱勇宝5 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员
庄周de蝴蝶6 小时前
梅开二度,这次拿下系统分析师
后端·程序员
林小帅7 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端