一分钟让你轻松拿捏 求解斐波那契数列!

news2024/10/5 20:19:16

文章目录

  • 斐波那契数列的概念
  • 递归求解第N个斐波那契数
  • 迭代求解第N个斐波那契数
  • 递归法和迭代法的比较

斐波那契数列的概念

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1,F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

递归求解第N个斐波那契数

通过对斐波那契数的了解,我们很容易写出下面这个通项公式:

在这里插入图片描述
写出通项公式后用递归方法来实现就比较简单了:

long long Fibonacci(int n)
{
	if (n == 0 || n == 1)
		return n;
	else
		return Fibonacci(n - 1) + Fibonacci(n - 2);
}//递归

迭代求解第N个斐波那契数

迭代也就是我们通常所说的循环,即用循环的方法来求第n个斐波那契数:

long long Fibonacci(int n)
{
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	long long a = 0;
	long long b = 1;
	long long c = 1;
	while (n - 2)
	{
		a = b;
		b = c;
		c = a + b;
		n--;
	}
	return c;
}//迭代法

递归法和迭代法的比较

看到递归法与迭代法的实现之后,那么你认为哪一种方法比较好呢?

如果只看表面上的代码量,你可能以为递归法的实现更为简单,但在运行时,当你要求第50个斐波那契数的时候,递归法迟迟给不出运行结果,而迭代法不要说是求第50个斐波那契数,就算是求第100个,第1000个,第10000个斐波那契数,都是秒出结果。那这是什么原因呢?

其实,在递归法中,我们要求第50个斐波那契数,就要先求第49个和第48个斐波那契数,而要求第49个斐波那契数,又要先求第48个和第47个斐波那契数,要求第48个斐波那契数,就要先求第47个和第46个斐波那契数…

在这里插入图片描述

在图中我们可以看到,递归法中做了很多“无用功”,即对同一斐波那契数进行了多次求解。这里可以用一个代码来说明:

#include <stdio.h>
int count = 0;
long long Fibonacci(int n)
{
	if (n == 0)
		count++;
	if (n == 0 || n == 1)
		return n;
	else
		return Fibonacci(n - 1) + Fibonacci(n - 2);
}//递归
int main()
{
	Fibonacci(20);
	printf("%d\n", count);
	return 0;
}

这里我们要求第20个斐波那契数,我们用一个变量count来记录这个过程中Fibonacci(0)被执行的次数,结果惊人的发现:
在求第20个斐波那契数的过程中,我们仅仅对Fibonacci(0)就执行了4181次,更不用说还有Fibonacci(1)、Fibonacci(2)、Fibonacci(3)等等,而且这只是求第20个斐波那契数的过程就这样“艰难”了,更不用说求第50个斐波那契数的过程了。所以,用递归法计算第50个斐波那契数时出现迟迟没有结果的现象也是有原因的,因为计算机确实在努力计算了,只是做了太多重复计算。

而迭代法就不一样了,无论你求第几个斐波那契数,该函数只会调用一次,最主要的是:迭代法不会对同一个斐波那契数进行重复计算。

总结:

1.递归法虽然写法简单,但求解斐波那契数时会对同一斐波那契数进行多次计算,做了太多“无用功”。
2.迭代法虽然代码量相比递归法要多,但它对同一斐波那契数只会计算一次,避免了做“无用功”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/662028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows10企业版安装西门子博途V15---01准备环境

网上看到了很多博途安装的文章或视频&#xff0c;一大部分都是你抄抄&#xff0c;我抄抄&#xff0c;滥鱼充饥&#xff0c;一是文章思路不清晰&#xff0c;二是具体安装环境不一致&#xff0c;三是视频讲解混乱&#xff0c;视频不清楚&#xff0c;操作有错误&#xff0c;其中不…

mac外接硬盘在哪里打开 mac外接硬盘用什么格式

Mac电脑具有出色的兼容性和高度的易用性&#xff0c;使得连接外接硬盘变得非常简单。但是&#xff0c;如果你不知道如何打开外接硬盘或者外接硬盘应该使用哪种格式&#xff0c;那么这将成为你使用Mac电脑过程中的一个难题。本篇文章将会向你介绍在Mac上如何打开外接硬盘&#x…

SpringCloud: SpringCloud面试题 ④

前言&#xff1a;面试题是一个以信息整合性看技术特性的一个手段。 1、什么是SpringCloud&#xff1f; springCloud是一系列框架的有序整合。目的在于大规模、分布式、微服务应用部署的解决方案。 2、什么是微服务&#xff1f; 微服务是将一个大而全的业务系统按照一定的业务…

机器学习与深度学习——基于潜在语义分析(LSA)的文档相似度计算

机器学习与深度学习——基于潜在语义分析&#xff08;LSA&#xff09;的文档相似度计算 基于潜在语义分析&#xff08;LSA&#xff09;是一种使用数学和统计方法来分析文本数据的技术。该技术可用于发现文本之间的关系&#xff0c;以及为文本提供有关其含义的更深层次的信息。…

【twcc】学习1:cc-feedback包构造及其接收处理

我的代码是m79,大神的代码看起来比我的新。核心的 ProcessTransportFeedbackInner 竟然没有找到。 webrtc源码分析(8)-拥塞控制(上)-码率预估 再次膜拜一下大神的分析。 本文大量引用大神的论述。 cc-controller下最重要的几个函数来介绍码率控制的核心过程,其分别是OnProce…

perf之cpu性能计数器

在win10主机上的VMware虚拟机里的centos7执行 perf list cache&#xff0c;显示空&#xff1a; [workcontrol-plane ~]$ perf list cache List of pre-defined events (to be used in -e): [workcontrol-plane ~]$ 原因是cpu cache的计数需要硬件支持&#xff0c;在虚拟机里…

使用omp和mpi并行技术实现蒙特卡罗算法实验 (MonteCarlo)

蒙特卡洛算法思想: 画一个正方形和一个内切圆然后在图形上面随机撒点&#xff0c;数一下落在圆 内和正方形内的点的数量之比&#xff0c;就是二者面积之比, 也就是π/4。 大数定理告诉我们&#xff0c;随着样本数量的增大&#xff0c;我们用这种方式模拟出来的值应该是越来越…

玩转电脑|带你了解如何快速查看电脑开关机时间

目录 前言 1、打开管理 2、打开事件查看器 3、打开windows日志 5、获取开机事件 6、获取关机事件 7、保存事件 8、保存事件文件 9、打开事件文件 前言 最近因为一些原因作者想要查看自己电脑每天的的开关机时间记录&#xff0c;但是不知道怎么进行查看&#xff0c;于是在网…

C++重温笔记(十): C++输入输出流

1. 写在前面 c在线编译工具&#xff0c;可快速进行实验: https://www.bejson.com/runcode/cpp920/ 这段时间打算重新把c捡起来&#xff0c; 实习给我的一个体会就是算法工程师是去解决实际问题的&#xff0c;所以呢&#xff0c;不能被算法或者工程局限住&#xff0c;应时刻提…

龙智携手Atlassian亮相DevOps国际峰会:释放团队潜力,以协作挑战不可能

2023年6月29日到30日&#xff0c;龙智将亮相DevOps国际峰会 北京站213展位。本次参展&#xff0c;我们将呈现Atlassian ITSM、DevOps以及工作管理三大解决方案&#xff0c;帮助您释放团队的力量&#xff0c;将不可能变成可能。 立即预约龙智专家面对面交流>>> 龙智自…

BuildAdmin商业级后台管理系统

🚀 CRUD代码生成 图形化拖拽生成后台增删改查代码,自动创建数据表,大气实用的表格、多达22种表单组件支持、拖拽排序、受权限控制的编辑和删除、支持关联表等等,可为您节省大量开发时间。[ 视频介绍 | 使用文档 ] 💥 内置WEB终端 我们内置了WEB终端以实现一些理想中的…

[算法前沿]--019-医学AIGC大模型的构建

基于主动健康的主动性、预防性、精确性、个性化、共建共享、自律性六大特征[1],华南理工大学未来技术学院-广东省数字孪生人重点实验室开源了中文领域生活空间主动健康大模型基座ProactiveHealthGPT,包括:(1) 经过千万规模中文健康对话数据指令微调的生活空间健康大模型扁鹊…

绿色零碳节群硕获奖,为可持续发展提供数字化抓手

6月15日&#xff0c;为探索迈向碳中和之路&#xff0c;第二届国际零碳节暨2023ESG领袖峰会盛大召开。各大绿色品牌与科技集团纷纷现身北京&#xff0c;展示低碳生产与绿色发展的科技成果。群硕也携带创新数字化产品与解决方案亮相国际绿色零碳节&#xff0c;并荣获2023绿色可持…

文献阅读:智能网联环境下面向语义通信的资源分配

目录 智能网联环境下面向语义通信的网络架构模型驱动和数据驱动资源分配算法对比计算卸载和协同计算未来研究方向参考文献 智能网联环境下面向语义通信的网络架构 车辆借助车联网将基于语义理解的计算任务进一步卸载到计算资源丰富的移动边缘计算服务器&#xff08;通常部署在路…

忆联主导消费级存储权威标准制定,推动行业规范化发展

近日&#xff0c;由记忆科技旗下公司忆联主导的团体标准《消费级固态硬盘可靠性及环境适应性规范》&#xff08;以下简称&#xff1a;规范&#xff09;研讨会顺利召开。此次会议完善了《规范》中的相关内容与细节&#xff0c;以确保消费级固态硬盘在可靠性方面能更进一步地满足…

沙利文头豹研究院发布《2023年腾讯云数据安全能力中心分析报告》

2023年6月15日&#xff0c;分析机构沙利文&#xff08;Frost & Sullivan&#xff09;头豹研究院发布《2023年腾讯安全数据安全能力中心分析报告》&#xff08;下文简称&#xff1a;报告&#xff09;&#xff0c;报告针对腾讯安全在数据安全领域的解决思路、产品、安全体系、…

在微信公众平台注册一个小程序开发账号

我们先访问地址 https://mp.weixin.qq.com/ 进入微信公众平台 如果您是第一个进入 直接点上面的 立即注册即可 然后 他会让我选择账号类型 我们要做的是小程序开发 所以 一定要选择小程序的账号类型 下一个界面并没有价值 直接点前往注册即可 注册主要分三个节点 第一步 填…

网络安全学术顶会——CCS '22 议题清单、摘要与总结(中)

注意&#xff1a;本文由GPT4与Claude联合生成。 81、HammerScope: Observing DRAM Power Consumption Using Rowhammer 内存单元尺寸的不断缩小使得内存密度提高&#xff0c;功耗降低&#xff0c;但同时也影响了其可靠性。Rowhammer攻击利用这种降低的可靠性在内存中引发比特翻…

从零使用source insight并完成必要设置

文章目录 1 创建新工程2 打开四大窗口3 更改编码方式5 修改背景颜色为护眼色6 设置批量注释和批量取消注释7 选择变量高亮其他相同变量也高亮8 自定义快捷键 1 创建新工程 点new project&#xff0c;改成自己熟悉的名字 选择源文件路径 add tree 加载完成后点close 然后点Pr…

【vue导入导出Excel】vue简单实现导出和导入复杂表头excel表格功能【纯前端版本和配合后端版本】

前言 这是一个常用的功能&#xff0c;就是导入和导出excel表格 但是时常会遇到一些复杂表头的表格导出和导入 比如我这个案例里面的三层表头的表格。 网上看了下发现了一个非常简单导出和导入方法 当然这个是纯前端的版本&#xff0c;会出现分页不好下载的情况。所以实际工作中…