当前位置: 首页 > news >正文

迭代、递归、尾递归实现斐波那契数列的第n项

1.什么是斐波那契数列:

斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列和兔子数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。


学习内容:

这里我们针对以1,1,为前两项的斐波那契数列,(1,1,2,3,5,8,13……)某一项即为前两项的和,这里介绍三种方法来实现它

1.迭代法:

long fac(int x)//迭代
{int i;int a = 1;int b = 1;int c = 0;for (i = 0; i < x - 2; i++){c = a + b;a = b;b = c;}return c;
}
int main()
{int a;scanf("%d", &a);printf("%d", fac(a));return 0;
}

我们先将前两个1储存在a,b中,在第一个循环中,c接收了a和b的和,再让a接收b的值,b接收c的值。如此循环往复(x-2)次,最终c的值即为f(x).

在这过程中,a,b值的更新是为了令a=f(x-2),b=f(x-1).所需循环次数由下得出:

求第三项:只需进行一次循环,即进行一次相加

求第四项:进行两次循环,即进行两次相加

求第五项:进行三次循环,即进行三次相加

……

不难看出,求第x项时,就需要进行x-2次循环了


2.线性递归法

int fac(int x)//线性递归
{if (x == 1 || x == 2)return 1;elsereturn fac(x - 2) + fac(x - 1);

此种方法很简单,就是根据数学定义按部就班:F1=1,F2=1,Fn=F(n-1)+F(n-2)(n>=3,n∈N*)

3.尾递归

int fun(int n,int a,int b)
{if(n<3)return b;else
return fun(n-1,b,a+b);
}
int main()
{
printf("%d",fun(5,1,1));
return 0;
}

我们来验证一下fun函数的功能,首先传参时必须保证形参a,b都接收1,传递(5,1,1,),过程如下:

fun(4,1,2)

fun(3,2,3)

fun(2,3,5)

当n-1=2时,函数就会返回第三形参——5


相关文章:

迭代、递归、尾递归实现斐波那契数列的第n项

1.什么是斐波那契数列&#xff1a; 斐波那契数&#xff0c;亦称之为斐波那契数列&#xff08;意大利语&#xff1a; Successione di Fibonacci)&#xff0c;又称黄金分割数列、费波那西数列、费波拿契数、费氏数列和兔子数列&#xff0c;指的是这样一个数列&#xff1a;0、1、…...

vulnhub靶场之driftingblues-1

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email (it should be on my profile) for troubleshooting or questions. 2.靶场下载 https://www.vulnhub.…...

NGINX服务器配置实现加密的WebSocket连接WSS协议

一、背景 最近在做小程序开发&#xff0c;需要在nginx中配置websocket加密模式&#xff0c;即wss。初次配置wss时&#xff0c;踩了两个小时的坑&#xff0c;本文将踩坑过程分享给大家&#xff0c;有需要用到的伙伴可以直接copy即可实现&#xff0c;节省宝贵时间。 二、WebSo…...

5个免费文章神器,用来改写文章太方便了

在当今信息爆炸的时代&#xff0c;内容创作和编辑是网络世界中至关重要的环节。然而&#xff0c;有时候我们可能会遇到一些内容需要进行改写或者重组的情况。为了提高效率&#xff0c;让这一过程更加顺畅&#xff0c;我们可以借助一些免费的文章神器来帮助我们完成这一任务。下…...

详细教程!VMware Workstation Pro16 安装 + 创建 win7 虚拟机!

嚯嚯嚯&#xff0c;很多宝子都想拥有自己不同的操作系统环境&#xff0c;用于学习或项目搭建。买服务器费钱&#xff0c;虚拟机则成为了一个很好的选择。本文详细介绍VMware Workstation Pro 16安装及win7虚拟机创建&#xff0c;保姆级教程奉上&#xff01; 一、准备工作 VMw…...

Python文件和异常(二)

目录 三、异常 &#xff08;一&#xff09;处理 ZeroDivisionError 异常 &#xff08;二&#xff09;使用 try-except 代码块 &#xff08;三&#xff09;使用异常避免崩溃 &#xff08;四&#xff09;else 代码块 &#xff08;五&#xff09;处理 FileNotFoundError 异常…...

大模型+影像:智能手机“上春山”

这个春节假期&#xff0c;一首《上春山》火了。吃瓜群众热热闹闹学了一个假期的“春山学”&#xff0c;了解了抢占C位的各种技巧。 假期过去&#xff0c;开工大吉&#xff0c;手机行业开始抢占今年的C位。那么问题来了&#xff0c;今年智能手机最大的机会点在哪里&#xff1f;答…...

8-pytorch-损失函数与反向传播

b站小土堆pytorch教程学习笔记 根据loss更新模型参数 1.计算实际输出与目标之间的差距 2.为我们更新输出提供一定的依据&#xff08;反向传播&#xff09; 1 MSEloss import torch from torch.nn import L1Loss from torch import nninputstorch.tensor([1,2,3],dtypetorch.fl…...

MySQL高级特性篇(8)-数据库连接池的配置与优化

MySQL数据库连接池的配置与优化 MySQL数据库是当前最流行的关系型数据库管理系统之一&#xff0c;高效的数据库连接池配置与优化是提高数据库性能和并发性能的重要手段。本文将介绍MySQL数据库连接池的配置与优化&#xff0c;并提供详细示例。 1. 连接池的作用与优势 数据库…...

mac下使用jadx反编译工具

直接执行步骤&#xff1a; 1.创建 jadx目录 mkdir jadx2.将存储库克隆到目录 git clone https://github.com/skylot/jadx.git 3. 进入 jadx目录 cd jadx 4.执行编译 等待片刻 ./gradlew dist出现这个就代表安装好了。 5.最后找到 jadx-gui 可执行文件&#xff0c;双击两下…...

分布式一致性软件-zookeeper

在我们进行软件开发过程中&#xff0c;为了实现某个功能可能借助多个软件&#xff0c;如存储数据的数据库软件&#xff1a;MySQL&#xff0c;Redis&#xff1b;消息中间件&#xff1a;rocketMq&#xff0c;kafka等。那么在分布式系统中&#xff0c;如果想实现数据一致性&#x…...

企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复

随着网络技术的应用与普及&#xff0c;越来越多的企业采用了数字化办公模式&#xff0c;数字化办公模式可以为企业提供强有力的数据支撑&#xff0c;可以为企业的发展方向与产品业务调整做好基础工作。但网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企…...

板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 Servlet编程&#xff1a;第五节 Cookie对象全解 一、什么是CookieCookie的源码 二、Cookie的具体操作&#xff08;1&#xff09;创建Cookie&#xff08;2&#xff09;获取Cookie&#xff08;3&#xff09;设置Cookie的到期时间&#xff08;4&#xff09;设置Cookie的路径…...

自动驾驶---Motion Planning之Path Boundary

1 背景 在上文《自动驾驶---Motion Planning之LaneChange》中,笔者提到过两种LaneChange的思路,这里再简单回顾一下:(1)利用Routing和周围环境的信息,决定是否进行换道的决策;(2)采用的博弈思想(蒙特卡洛树搜索---MCTS)决定是否进行换道的决策。不管是变道,避让还是…...

Leetcode 3048. Earliest Second to Mark Indices I

Leetcode 3048. Earliest Second to Mark Indices I 1. 解题思路2. 代码实现 题目链接&#xff1a;3048. Earliest Second to Mark Indices I 1. 解题思路 这一题的话基础的思路就是二分法查找最小的可以将所有的数字都mark上的最小位置。 因此&#xff0c;这里的问题就会变…...

从源码学习单例模式

单例模式 单例模式是一种设计模式&#xff0c;常用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。这意味着无论在程序的哪个地方&#xff0c;只能创建一个该类的实例&#xff0c;而不会出现多个相同实例的情况。 在单例模式中&#xff0c;常用的实现方式包括懒汉…...

axios介绍和使用

1. Axios是什么 Axios框架全称&#xff08;ajax – I/O – system&#xff09; Axios是一个基于Promise的JavaScript HTTP客户端&#xff0c;用于浏览器和Node.js环境。它可以发送HTTP请求并支持诸如请求和响应拦截、转换数据、取消请求以及自动转换JSON数据等功能。 Axios提…...

redis雪崩问题

Redis雪崩问题是指在Redis缓存系统中&#xff0c;由于某些原因导致大量缓存数据同时失效或过期&#xff0c;导致所有请求都直接访问数据库&#xff0c;从而引发数据库性能问题甚至宕机的情况。 造成Redis雪崩问题的原因主要有以下几个&#xff1a; 缓存数据同时失效&#xff…...

[SUCTF 2019]EasySQL1 题目分析与详解

一、题目介绍 1、题目来源&#xff1a; BUUCTF网站&#xff0c;网址&#xff1a;https://buuoj.cn/challenges 2、题目描述&#xff1a; 通过以上信息&#xff0c;拿到flag。 二、解题思路 首先打开靶机&#xff0c;尝试输入1查看回显&#xff0c;回显如图所示&#xff1a;…...

TestNG与ExtentReport单元测试导出报告文档

TestNG与ExtentReport集成 目录 1 通过实现ITestListener的方法添加Reporter log 1.1 MyTestListener设置 1.2 输出结果 2 TestNG与ExtentReporter集成 2.1 项目结构 2.2 MyExtentReportListener设置 2.3 单多Suite、Test组合测试 2.3.1 单Suite单Test 2.3…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...