C语言实现斐波那契数列的多种方法
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。对于解决此类问题方法有四,前两种对于初学者来说,应该可以思考研究明白,后两种就要求有一点点基础了,但是我相信,大家都可以学会的!!!
一、递归方法
完整代码展示如下:
#include <stdio.h>int fib(int n)
{if (n <= 1) {return n;} else {return fib(n - 1) + fib(n - 2);}
}int main()
{int n;printf("请输入一个整数: ");scanf("%d", &n);printf("斐波那契数列第%d项为: %d", n, fib(n));return 0;
}
递归方法实现原理如下:
首先检查输入的n是否小于等于1。如果是,那么直接返回n,因为斐波那契数列的前两项就是0和1。
如果n大于1,那么函数会递归地调用自身两次,分别传入n-1和n-2作为参数。这是因为斐波那契数列的定义是每一项都是前两项的和。
最后,将这两个递归调用的结果相加,并返回结果。
结果展示:

二、迭代方法
完整代码展示如下:
#include <stdio.h>int fib(int n)
{if (n <= 1) {return n;}int a = 0, b = 1, temp;for (int i = 2; i <= n; i++) {temp = a + b;a = b;b = temp;}return b;
}int main()
{int n;printf("请输入一个整数: ");scanf("%d", &n);printf("斐波那契数列的第%d项为: %d", n, fib(n));return 0;
}
迭代方法实现原理如下:
函数首先检查n是否小于等于1,如果是,则直接返回n。这是因为斐波那契数列的前两项是0和1。
如果n大于1,函数使用一个循环来计算斐波那契数列的第n项。在每次迭代中,它计算a和b的和,并将结果存储在临时变量temp中。然后,它将b的值赋给a,将temp的值赋给b。这样,a和b分别表示斐波那契数列的前两项和当前项。
循环继续进行,直到i等于n。最后,函数返回b的值,即斐波那契数列的第n项。
结果展示:

三、数组方法
完整代码展示如下:
#include <stdio.h>void fib(int n)
{int a[n];a[0] = 0;a[1] = 1;for (int i = 2; i < n; i++) {a[i] = a[i - 1] + a[i - 2];}for (int i = 0; i < n; i++) {printf("%d ", a[i]);}
}int main()
{int n;printf("请输入斐波那契数列的长度: ");scanf("%d", &n);fib(n);return 0;
}
数组方法原理如下:
首先,代码声明了一个长度为n的整型数组a。然后,通过将数组的第一个元素和第二个元素分别赋值为0和1,初始化了斐波那契数列的前两个元素。
接着,使用一个for循环从索引2开始迭代到n-1。在每次迭代中,代码计算斐波那契数列的第i个元素,即前两个元素的和,并将其存储在数组a的相应位置。
最后,使用另一个for循环遍历数组a,并使用printf函数打印出每个元素的值。这样,你就可以看到斐波那契数列的前n个元素被打印出来了。
结果展示:

四、通项公式方法
要实现斐波那契数列通项公式方法,我们首先需要了解斐波那契数列的通项公式:
F(n) = (φ^n - (-φ)^-n) / sqrt(5)
其中,φ = (1 + sqrt(5)) / 2。
完整代码展示如下:
#include <stdio.h>
#include <math.h>double fibonacci(int n)
{double phi = (1 + sqrt(5)) / 2;return (pow(phi, n) - pow(-phi, -n)) / sqrt(5);
}int main()
{int n;printf("请输入要计算的斐波那契数列项数:");scanf("%d", &n);printf("第%d项斐波那契数列值为:%lf", n, fibonacci(n));return 0;
}
通项公式方法原理如下:
函数内部首先定义了一个变量phi,它的值为(1 + sqrt(5)) / 2,这是斐波那契数列中相邻两项之比的近似值。
接着,函数使用公式(pow(phi, n) - pow(-phi, -n)) / sqrt(5)来计算斐波那契数列的第n项。其中,pow(x, y)表示求x的y次方,sqrt(x)表示求x的平方根。
最后,函数返回计算得到的斐波那契数列第n项的值。
结果展示:

五、注意事项
第一种递归方法在计算较大的斐波那契数时可能会导致性能问题,因为它会重复计算许多相同的子问题。第三种方法使用了数组来存储已经计算过的斐波那契数列,可以提高效率。第四种方法使用了斐波那契数列的通项公式,可以直接计算出第n项的值,但是需要注意精度问题。
结语:以上就是相关斐波那契数列的解决方法了,希望对大家有所帮助。有什么问题欢迎大家留言~~~
相关文章:
C语言实现斐波那契数列的多种方法
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。对于解决此类问题方法有四,前两…...
一文解决:Swagger API 未授权访问漏洞问题
Swagger 是一个用于设计、构建、文档化和使用 RESTful 风格的 Web 服务的开源软件框架。它通过提供一个交互式文档页面,让开发者可以更方便地查看和测试 API 接口。然而,在一些情况下,未经授权的访问可能会导致安全漏洞。本文将介绍如何解决 …...
Elasticsearch下载安装,IK分词器、Kibana下载安装使用,elasticsearch使用演示
首先给出自己使用版本的网盘链接:自己的版本7.17.14 链接:https://pan.baidu.com/s/1FSlI9jNf1KRP-OmZlCkEZw 提取码:1234 一般情况下 Elastic Search(ES) 并不单独使用,例如主流的技术组合 ELK(…...
springboot自定义404页面
添加配置类 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.servlet.Servlet; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.valves.ErrorReportValve; import org.apache.coyote.UpgradeProtoc…...
C/C++数据结构之时间复杂度和空间复杂度详细解析以及力扣刷题
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.前言 2.算法的…...
【需要理解】80 单词搜索
单词搜索 题解1 回溯(需要改变起点) 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内…...
笔记本电脑的键盘鼠标如何共享控制另外一台电脑
环境: 联想E14 x2 Win10 across 2.0 问题描述: 笔记本电脑的键盘鼠标如何共享控制另外一台电脑 解决方案: 1.下载across软件,2台电脑都按装,一台设为服务端,一台客户端 2.把配对好设备拖到右边左侧…...
【计算机网络】(谢希仁第八版)第二章课后习题答案
第二章 1.物理层要解决哪些问题?物理层的主要特点是什么? 答:物理层要解决的主要问题: (1)物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差…...
笔记软件Notability mac中文版软件功能
Notability mac是一款帮助用户备注文件的得力工具,Notability Mac版可用于注释文稿、草拟想法、录制演讲、记录备注等。它将键入、手写、录音和照片结合在一起,便于您根据需要创建相应的备注。 Mac Notability mac中文版软件功能 将手写,照片…...
【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性
🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入门技术皆在 我…...
Springmvc 讲解(1)
文章目录 前言一、SpringMvc1、简介2、核心组件和调用流程2.1 涉及组件的理解 3、小案例快速体验3.1场景需求3.1.1 导入依赖3.1.2 controller声明3.1.3 核心配置类3.1.4 环境搭建3.1.6 配置tomcat3.1.7 测试 二、SpringMvc 接收参数1.路径设置注解2、param接收参数四种类型2.1 …...
超级英雄的导航之旅:动态路由和嵌套路由
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
发现个好玩的 Windows微信对话框换行
按住shift键按enter就是换行 直接按enter为发送...
Vue3最佳实践 第八章 ESLint 与 测试 ( Jest )
Jest 测试 Vue 组件 在前端项目开发过程中,有很多时候也会要进行测试工作。本文将重点介绍如何利用 JavaScript 测试框架 Jest 进行高效的测试。Jest 是由 FaceBook 开发的顶级测试框架之一,广受开发者们的欢迎和信赖。在接下来的内容中,我…...
【抓包分析】通过ChatGPT解密还原某软件登录算法实现绕过手机验证码登录
文章目录 🍋前言实现效果成品广告抓包分析一、定位加密文件二、编辑JS启用本地替换 利用Chatgpt进行代码转换获取计划任务id模拟数据请求最后 🍋前言 由于C站版权太多,所有的爬虫相关均为记录,不做深入! 今天发现gith…...
【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么
本文参考https://zhuanlan.zhihu.com/p/640723352 准备工作 先准备一个勾选了复制的Actor,然后在游戏开始时Spawn这个Actor 源码过程详解 发送属性同步 在NetDriver的TickFlush中发送属性同步的数据 1、ServerReplicateActors_BuildConsiderList 去找到所有需…...
Spring中Bean的完整生命周期!(Bean实例化的流程,Spring后处理器,循环依赖解释及解决方法)附案例演示
Bean实例化的基本流程 加载xml配置文件,解析获取配置中的每个的信息,封装成一个个的BeanDefinition对象将BeanDefinition存储在一个名为beanDefinitionMap的Map<String,BeanDefinition>中ApplicationContext底层遍历beanDefinitionMap,…...
AcWing第 127 场周赛 - AcWing 5283. 牛棚入住+AcWing 5284. 构造矩阵 - 模拟+快速幂+数学
AcWing 5283. 牛棚入住 题目数据范围不大,直接暴力模拟即可 按照题目所说的意思即可。 #include <math.h> #include <stdio.h> #include <algorithm> #include <cstring> #include <iostream> using namespace std; const int N 1…...
2023-10-31 游戏开发-微信小游戏-文档记录
摘要: 2023-10-31 游戏开发-微信小游戏-文档记录 微信开发文档: 快速上手 | 微信开放文档 基础 | 微信开放文档 Cocos/Laya/Egret引擎适配 | 微信开放文档 cocos和微信平台相关文档: Cocos Creator 3.8 手册 - 发布到微信小游戏...
2023NOIP A层联测21-异或
给定一长度为 N N N 的由非负整数组成的数组 a a a,你需要进行一系列操作,每次操作选择一个区间 [ l , r ] [l,r] [l,r],将 a [ l , r ] a_{[l,r]} a[l,r] 异或上 w w w。你需要将 a i a_i ai 全部变为 0 0 0。 求最小操作次数。…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
