C语言----斐波那契数列(附源代码)

      各位看官们好,当我写了上一篇博客杨辉三角后,有一些看官叫我讲一下斐波那契数列。对于这个大家应该是有了解的。最简单的规律就是f(n)=f(n-2)+f(n-1)。就是当前是前两项之和,然后下标1和0都是1.从第三项开始计算的。那么我们知道规律,那么我们就直接来讲讲如何实现和实现方法有哪些吧。

递归

        我想大家学习C语言到现在应该看到斐波那契数列应该想到的是递归吧。我想递归大家应该还知道它的核心思想吧,就是每递归一次,那么这个问题就要越靠近我们想要的答案一次,一直递归到想要答案就返回。好,那么我们现在想一想怎么搞。那么我们知道我们有特殊情况就是,如果我输入1和2的话,那么我们得到的值是1.那么我们这个就可以直接写出来哇。好当我们写出了特殊情况后,我们来思考正常情况。那么我们也知道我们规律就是前两项之和。那么我们就直接写啊,是不是。大家思考一下:


int xixi(int a)
{if (a == 1 || a == 2){return 1;}else{return xixi(a - 1) + xixi(a - 2);}
}
int main()
{int a = 0;printf("请输入要多少位的斐波那契数\n");scanf("%d", &a);printf("%d ", xixi(a));return 0;
}

        我们只要不是特殊情况的话,我们只需要在递归的时候将前两项传来,直到设定的值,那么我们就可以得到结果了。大家思考一次,是吧。代码很简单,但是有一个问题就是。递归的内存占用太多了。很有可能造成栈溢出。也许大家输入前面的数字编译器还是很快的输出的。但是当我们输入较大值如100这类的我们就可以明显的感觉速度很慢了。所以递归大家可以知道这个方法但是使用起来限制还是很大了。大家知道有这个办法就可以了。

for循环

      okok,当我们写了递归后,我们递归其实还是有点难度的,毕竟我们还是需要思考一下,怎么实现的吧。但是我们要是用for循环的,我们从最开始学习C语言的时候我们就知道有个for循环。那么最基础的知识其实是很有作用的,那么我们来思考一下for循环如何来实现我们的斐波那契数吧。但其实for循环也是比较简单的,毕竟大家思考一下。我们最基本的规律就是前两项之和f3,那么我们就创建三个变量吧。一个作为最后的相加项我们最后返回的。然后另外两个就一个作为前一项f1一个作为前两项f2。那么这个如何交换值值嘞。首先我们就最开始的时候考虑特殊情况。1和2的时候那么我们就直接从2开始吧,如果我输入的值是1或者2的话,for本来就等于2了,不执行,然后直接返回f3。那么我们可以确定了f3的初始值为1吧。并且我们现在把特殊情况也处理了。那我们正常的话f3=f1+f2。然后f2=f3。这个是为什么嘞,因为我们大家算f3,是不是就是我们的前一个f3加一个f2但我不能直接写f3的前一项啊。所以f2就成为上一个f3吧。那f2成为上一个f3那。f1自然而然的变成了上一个的f2了吧。这样大家是不是就通透了呀。我们将f1,2,3全部设为1.然后for循环从2开始那么就排除了特殊情况。然后最开始就将f3更新,然后f2和f1相继跟新这样如果下次没有更新的话,我们就可以直接确定了返回值f3了。

int xixi(int a)
{int f3 = 1;int f2 = 1;int f1 = 1;for (int y = 2; y < a; y++){f3 = f1 + f2;f1 = f2;f2 = f3;}return f3;
}
int main()
{int a = 0;printf("请输入要多少位的斐波那契数\n");scanf("%d", &a);printf("%d", xixi(a));return 0;
}

        大家需要注意一下啊。就是f1与f2更新的顺序不要乱哦。不然的话f1也变成上一个f3了。然后就太多的麻烦了。

数组

        OK呀,其实讲了上面的两个方法就差不多了的,但是我还想到了一个方法,就是我们使用数组来实现这个。那大家先想一想数组如何实现这个了。但其实啊。也很简单与我们的for循环是差不多的。我们上一个for循环是需要实时更新的,但我们数组其实就是很简单的。我们创建一个较大的数组。然后没循环一次,那么就往数组里写入新的值,然后循环到设定值结束,那么就返回这个数组下标的的元素就可以了。那么简单的思路那我们就直接开始搞吧。

int xixi(int a)
{int i = 0;int arr[100] = {0, 1,1};for (i = 2; i <= a; i++)//从第一项开始{arr[i] = arr[i - 1] + arr[i - 2];}return arr[a];}
int main()
{int a = 0;printf("请输入要多少位的斐波那契数\n");scanf("%d", &a);printf("%d", xixi(a));return 0;
}

        大家看看上面咦。为什么我们创建数组的时候开始要给0,1,1的值啊。其实也很简单就是我们数组下标啊。我们原本计算的都是从1开始的,但是我们数组是下标如果不设置得话,那么下标0为1,设置的值就会大很多,当然是越向后值就比正确值大很多。大家可以下来尝试一下。

      好了,那么我们上面三种方法就差不多了,递归方法虽然有,但是可以处理小部分递归次数较小的,如果太大了。那么就是会很慢甚至报错。建议少用用for循环的方法也可以。好了。以上就是本篇博客的内容了。如果还有补充的话,希望大家可以评论区留言。

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

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

相关文章

位图(c++)

文章目录 1.位图概念2.位图的实现3.应用&#xff08;解决整形存在或次数问题&#xff09;3.1存在问题3.2次数问题 5.搜索的方法对比&#xff1a; 1.位图概念 和哈希一样&#xff0c;都是一个表来记录某个元素的个数或者存在与否&#xff1b;不同的是哈希使用的计算机定义的完整…

群辉部署小雅alist实现视听盛会

最近群辉搭建起来了&#xff0c;开始整蛊影视库&#xff0c;之前搞过nastool。这次折腾下小雅alist。 1.下载并安装 直接在群辉的docker里面下载映像 主要映射下端口和文件夹 #token mytoken.txt 获取地址&#xff1a;https://alist.nn.ci/zh/guide/drivers/aliyundriv…

Git使用(2):远程仓库

一、创建远程仓库 登录码云Gitee - 基于 Git 的代码托管和研发协作平台。 点击右上角&#xff0c;新建仓库。 创建完成&#xff0c;复制仓库地址接下来要使用。 二、将idea项目推送到码云 首先创建本地仓库VCS -> Create Git Repository。然后选择Manage Remotes&#xff0…

用友hr软件统一认证与致远OA单点登录身份周期管理怎么做

一、引言 随着企业信息化建设的深入&#xff0c;各类管理软件如用友HR、致远OA等已经成为事业单位日常运营不可或缺的工具。用友HR软件以其强大的人力资源管理功能&#xff0c;帮助企事业单位实现员工信息的集中管理&#xff1b;而致远OA则以其便捷的办公流程管理&#xff0c;…

springcloud简单了解及上手

springcloud微服务框架简单上手 文章目录 springcloud微服务框架简单上手一、SpringCloud简单介绍1.1 单体架构1.2 分布式架构1.3 微服务 二、SpringCloud与SpringBoot的版本对应关系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注册中心3.1 认识和安装Nacos3.2 配置Nacos3.3 n…

C++ 并发编程指南(11)原子操作 | 11.6、计算机内存结构

文章目录 一、计算机内存结构1、内存的基本组成2、内存的类型3、内存的结构层次4、CPU架构5、局部性原理6、总结 前言 在探讨计算机的运行效率和数据处理能力时&#xff0c;内存结构无疑是一个至关重要的部分。内存&#xff0c;作为计算机系统中的关键组件&#xff0c;承担着存…

【保姆级介绍自动化的讲解】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【C语言】4.C语言数组(2)

文章目录 6. 二维数组的创建6.1 ⼆维数组的概念6.2 ⼆维数组的创建 7. 二维数组的初始化7.1 不完全初始化7.2 完全初始化7.3 按照⾏初始化7.4 初始化时省略⾏&#xff0c;但是不能省略列 8. 二维数组的使用8.1 ⼆维数组的下标8.2 ⼆维数组的输⼊和输出 9. 二维数组在内存中的存…

利用一段代码轻松绕过PHP授权系统

利用一段代码轻松绕过PHP授权系统 第一步&#xff1a;首先你需要改名全局文件 比如说全局文件 common.php&#xff0c;那么 你将他改为core.php 第二步&#xff1a;创建文件 创建一个文件&#xff0c;和改名前的全局文件名称一样&#xff0c;然后把以下代码复制进去就OK了 …

【MySQL01】【 Explain 命令详解】

文章目录 一、前言二、Explain 概览三、Explain 详解1. id2. select_type3. table4. type5. possible_keys6. key7. key_len8. ref9. rows10. filtered11. extra 列 四、补充1. EXPLAIN 扩展1.1 Extend EXPLAIN1.2 JSON 格式的执行计划 2. Intersection、Union、Sort-Union 索引…

使用C++实时读取串口数据(window使用已编译LibModbus库并用QT实现一个实时读取串口数据)

先看这篇文章&#xff0c;写得很详细: QT应用篇 四、window编译LibModbus库并用QT编写一个Modbus主机 手把手教学 编译好的LibModbus库可以在上面文章里下载&#xff0c;也可以在我的链接里下载&#xff1a; 为了在Qt Creator中创建新项目并嵌入上述C代码&#xff0c;请执行以…

C++进阶:红黑树介绍及模拟实现(图示详解过程)

C进阶&#xff1a;红黑树介绍及模拟实现 上次介绍了AVL树&#xff1a;C进阶&#xff1a;AVL树详解及模拟实现&#xff08;图示讲解旋转过程&#xff09; 今天就来紧接着来红黑树啦!!! 文章目录 1.红黑树介绍约束规则 2.项目文件规划3.整体框架&#xff08;节点和Tree&#xf…

whisper报错:hp, ht, pid, tid = _winapi.CreateProcess [WinError 2] 系统找不到指定的文件。

in _execute_child hp&#xff0c; ht&#xff0c; pid&#xff0c; tid _winapi.CreateProcess&#xff08;executable&#xff0c; args&#xff0c; FileNotFoundError&#xff1a; [WinError 2] 系统找不到指定的文件。 原因&#xff1a; 没装ffmpeg 或者 ffmpeg没添加到…

k8s pod就绪探针

Pod 可能需要时间来加载配置或数据&#xff0c;或者可能需要执行预热过程以防止第一个用户请求时间太长影响了用户体验。在这种情况下&#xff0c;不希望该 pod 立即开始接收请求&#xff0c;尤其是在运行的实例可以正确快速地处理请求的情况下。不要将请求转发到正在启动的 po…

YOLOv5独家改进:backbone改进 | 微软新作StarNet:超强轻量级Backbone | CVPR 2024

💡💡💡创新点:star operation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力,这就是StarNet的核心创新,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟 💡💡💡如何跟YOLOv5结合:替代YOLOv5的backbone 收录 YOL…

电容笔记汇总

电容 一、电容理论基础 1、电容的本质 两个相互靠近的导体&#xff0c;中间夹一层不导电的绝缘介质&#xff0c;这就构成了电容器。当电容器的两个极板之间加上电压时&#xff0c;电容器就会储存电荷。 两个相互靠近的金属板中间夹一层绝缘介质组成的器件&#xff0c;当两端…

豆浆机缺水检测功能如何实现的

豆浆机缺水检测功能的实现是通过光学液位传感器来完成的。这种传感器具有多种优势&#xff0c;如内部所有元器件经过树脂胶封处理&#xff0c;没有任何机械活动部件&#xff0c;免调试、免检验、免维护等特点。它采用了光电液位传感器内置的光学电子元件&#xff0c;体积小、功…

Docker常用镜像安装

1. mysql 1.1 安装 获取镜像 docker pull mysql:8.0.30创建文件挂载目录 创建容器并运行 docker run -p 3306:3306 --name mysql8 \ -v /home/docker/mysql8/log:/var/log/mysql \ -v /home/docker/mysql8/data:/var/lib/mysql \ -v /home/docker/mysql8/mysql-files:/va…

保研机试之【设备驱动程序】

B选项&#xff1a; 综上&#xff0c;我认为这道题选择D~

一些近来对内网攻防的思考

我知道我最近托更托了很久了&#xff0c;其实也不是小编懒啊 这小编也是一直在写&#xff0c;但是遇到的问题比较多&#xff08;我太菜了&#xff09;&#xff0c;所以一直拖着。 但是总不能不更吧 那就讲一下进来的一些内网攻防的思考吧 1.CrossC2上线Linux到CS(成功) …