斐波那契数列的两种解法

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

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

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

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

总结

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

相关推荐
楼田莉子6 分钟前
同步/异步日志系统:日志器管理器模块\全局接口\性能测试
linux·服务器·开发语言·c++·后端·设计模式
geNE GENT9 分钟前
Spring Boot管理用户数据
java·spring boot·后端
怒放吧德德12 分钟前
Spring Boot实战:Event事件机制解析与实战
java·spring boot·后端
梦无矶26 分钟前
快速设置uv默认源为国内镜像
数据库·redis·后端·python·uv
yoyo_zzm1 小时前
SpringBoot Test详解
spring boot·后端·log4j
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题】【Java基础篇】01_说说ArrayList的底层原理/扩容规则
java·后端·面试·list
zuowei28891 小时前
Spring BOOT 启动参数
java·spring boot·后端
星浩AI2 小时前
手把手带你在 Windows 安装 Hermess Agent,并接入飞书 [喂饭级教程含踩坑经验]
人工智能·后端·agent
神奇小汤圆2 小时前
Spring Boot 入门:Java 生态最流行的应用开发框架介绍
后端