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

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)表示求xy次方,sqrt(x)表示求x的平方根。

       最后,函数返回计算得到的斐波那契数列第n项的值。

结果展示:


五、注意事项 

       第一种递归方法在计算较大的斐波那契数时可能会导致性能问题,因为它会重复计算许多相同的子问题。第三种方法使用了数组来存储已经计算过的斐波那契数列,可以提高效率。第四种方法使用了斐波那契数列的通项公式,可以直接计算出第n项的值,但是需要注意精度问题。


结语:以上就是相关斐波那契数列的解决方法了,希望对大家有所帮助。有什么问题欢迎大家留言~~~

http://www.lryc.cn/news/212826.html

相关文章:

  • 一文解决:Swagger API 未授权访问漏洞问题
  • Elasticsearch下载安装,IK分词器、Kibana下载安装使用,elasticsearch使用演示
  • springboot自定义404页面
  • C/C++数据结构之时间复杂度和空间复杂度详细解析以及力扣刷题
  • 【需要理解】80 单词搜索
  • 笔记本电脑的键盘鼠标如何共享控制另外一台电脑
  • 【计算机网络】(谢希仁第八版)第二章课后习题答案
  • 笔记软件Notability mac中文版软件功能
  • 【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性
  • Springmvc 讲解(1)
  • 超级英雄的导航之旅:动态路由和嵌套路由
  • 发现个好玩的 Windows微信对话框换行
  • Vue3最佳实践 第八章 ESLint 与 测试 ( Jest )
  • 【抓包分析】通过ChatGPT解密还原某软件登录算法实现绕过手机验证码登录
  • 【UE】属性同步,源码详解一个勾选了Actor复制的Actor第一次被创建时经历了什么
  • Spring中Bean的完整生命周期!(Bean实例化的流程,Spring后处理器,循环依赖解释及解决方法)附案例演示
  • AcWing第 127 场周赛 - AcWing 5283. 牛棚入住+AcWing 5284. 构造矩阵 - 模拟+快速幂+数学
  • 2023-10-31 游戏开发-微信小游戏-文档记录
  • 2023NOIP A层联测21-异或
  • 分布式存储系统Ceph应用组件介绍
  • 【数据结构】数组和字符串(十一):字符串的定义与存储(顺序存储、链式存储及其C语言实现)
  • zk-Bench:SNARKs性能对比评估工具
  • 【Linux】NTP服务器配置、时间修改
  • 毕业设计基于SpringMVC+Mybatis+Bootstrap的电影院管理系统源码+数据库
  • vantUI(Tabbar标签页)浏览器返回上一页的失效问题
  • 【算法】Prim算法(求最小生成树)
  • go语言,yaml实现简单的workflow工作流
  • BaiduMallServcie
  • vue3+jsx+antd的插槽写法之一
  • Shell 学习之 if 命令