斐波那契数列的两种解法

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

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

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

一个数列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;
	}
}

总结

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

相关推荐
浮尘笔记13 小时前
Go语言临时对象池:sync.Pool的原理与使用
开发语言·后端·golang
梦梦代码精14 小时前
BuildingAI vs Dify vs 扣子:三大开源智能体平台架构风格对比
开发语言·前端·数据库·后端·架构·开源·推荐算法
REDcker15 小时前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
没有bug.的程序员17 小时前
Java 序列化:Serializable vs. Protobuf 的性能与兼容性深度对比
java·开发语言·后端·反射·序列化·serializable·protobuf
我爱娃哈哈18 小时前
SpringBoot + Spring Security + RBAC:企业级权限模型设计与动态菜单渲染实战
spring boot·后端·spring
小王不爱笑13220 小时前
SpringBoot 配置文件
java·spring boot·后端
想用offer打牌20 小时前
Spring AI vs Spring AI Alibaba
java·人工智能·后端·spring·系统架构
码农幻想梦21 小时前
实验五 spring入门及IOC实验
java·后端·spring
a程序小傲1 天前
蚂蚁Java面试被问:向量数据库的相似度搜索和索引构建
开发语言·后端·python·架构·flask·fastapi
派大鑫wink1 天前
【Day39】Spring 核心注解:@Component、@Autowired、@Configuration 等
java·后端·spring