C语言 计算斐波那契数列

前言

在学习C语言的道路上多次遇到了求斐波那契数列的问题,今天来总结一下我所知道的几种思想方法。

方法一:循环

使用斐波那契数列的推导式,通过循环将每一个值保存到数组fib中。需要说明的是,这里的fib[0]表示的是第0项。为了统一,之后的几种方法也是从第0项开始的。

程序如下:

int  n;
int fib[100] = {0,1};  //使用静态数组保存数列
/*使用动态数组保存数列int* fib = (int *)malloc((n+1)*sizeof(int));fib[0] = 0;fib[1] = 1;使用malloc一定要在程序结束前使用free(),保持一个良好的编程习惯free(fib);
*/
scnaf("%d", &n);
for(int i = 1; i <= n; i++)
{fib[i] = fib[i - 1] + fib[i - 2];
}

方法二:递归

斐波那契数列的推导式是一个典型的递归式,只要把循环改写成递归的形式就行了

程序如下:

int fib(int i)
{if(i <= 1){return i;}else{return fib(i - 1) + fib(i - 2);}
}

方法三:动态规划


直接用递归来求解斐波那契数列的流程如上图所示(以fib(5)为例),不难看出,这里存在着很多的重复计算,极大的影响了计算效率。所以,采用动态规划的编程思想来减少这种不必要的计算。

具体到方法就是将每次计算得到的值用数组保存起来,每次递归调用之前先检查数组中是否有计算得到的值,有的话返回这个值,没有的话再通过递归计算这个值。

程序如下:

int fib(int i, int *a)
{if(i<=1){return i;}if(a[i] != 0){return a[i];}else(a[i] = fib(i-1, a) + fib(i-2, a);)
}
int main()
{int n;scanf("%d",&n);//通过malloc创建动态数组,用来保存数列int* a = (int *)malloc((n + 1) * sizeof(int));a[0] = 0;a[1] = 1;fib(n, a); // 执行完后,斐波那契数列的前n项都保存到数组a中了free(a); //与malloc配套使用return 0;
}

方法四:通项公式

前三种方法都是利用斐波那契数列的推导公式(fib N = fib N-1 + fib N-2)计算的,但是如果知道了它的通项公式,则可以利用通项公式直接计算每一项的值。

斐波那契数列的通项公式为:
f i b n = 1 5 [ ( 5 + 1 2 ) n − ( 5 − 1 2 ) n ] fib_n=\frac{1}{\sqrt{5}}[(\frac{\sqrt{5}+1}{2})^n-(\frac{\sqrt{5}-1}{2})^n] fibn​=5 ​1​[(25 ​+1​)n−(25 ​−1​)n]

有兴趣的同学可以自己尝试一下使用通项公式计算,我在此就不展示代码了。

C语言 计算斐波那契数列相关推荐

  1. OJ1055: 兔子繁殖问题(C语言计算斐波那契数列/“兔子数列”)

    题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规律,假设没有兔 ...

  2. c语言n次方怎么输入_C语言实现斐波拉契数列

    C语言实现斐波拉契数列教程 怎么使用 C 语言实现计算斐波拉契数列的第 N 项的值? C语言实现斐波拉契数列详解 背景知识 斐波那契数列是一组第一位和第二位为 1,从第三位开始,后一位是前两位和的一组 ...

  3. 用递归法计算斐波那契数列的第n项

     斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1, ...

  4. 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)

    先科普一下什么叫斐波那契数列,以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci ...

  5. 使用循环计算斐波那契数列

    1 /* 2 * 使用循环计算斐波那契数列的前 20 项,已经前 20 项的和. 3 提示:斐波那契数列:1,1,2,3,5,8,13,21- 4 从第三项开始,每一项为前面两项的和 5 6 */ 7 ...

  6. python利用列表计算斐波那契数列前30项_python斐波那契数列的计算方法

    题目: 计算斐波那契数列.具体什么是斐波那契数列,那就是0,1,1,2,3,5,8,13,21,34,55,89,144,233. 要求: 时间复杂度尽可能少 分析: 给出了三种方法: 方法1:递归的 ...

  7. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...

    斐波那契数列计算 B 描述 斐波那契数列如下: F(0) = 0, F(1) = 1 F(n) = F(n-1) + F(n-2) 编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波 ...

  8. 计算x的n次幂,n的阶乘,计算斐波那契数列的第n位

    计算x的n次幂 function two(n,x){var nul=1;for(var i=1;i<=n;i++){nul*=x;console.log(nul)} } 计算n的阶乘 funct ...

  9. c语言输出斐波那契程序,C语言打印斐波那契数列

    C语言打印斐波那契数列,具体的个数由用户输入. 我们知道斐波那契数列的规律是从第三个数开始,它数值是前2个的合计. 实现的代码如下: #include #include int main() { in ...

最新文章

  1. python将string转换为json_python -- 将string转换成dict的方法
  2. 1003 我要通过! (20point(s))
  3. python3库_对python3中pathlib库的Path类的使用详解
  4. CentOS 6.5 源码安装 mysql 5.6
  5. 水晶报表中对某一栏位值进行处理_合并报表——非同一控制下的企业合并amp;同一控制下的企业合并...
  6. 透彻!博士生成长需要经历的7道门
  7. anaconda和python区别_初学 Python 者自学 Anaconda 的正确姿势是什么?
  8. 360 快视频疑似盗取 B 站数据,暂无最新回应
  9. TensorFlow:判断CUDA和GPU是否可用
  10. paip.取回密码功能总结
  11. [struts2]继承ActionSupport类
  12. 西门子 1200PLC全额补贴课程
  13. 【软件设计师】2022年上半年软件设计师 下午试题六(原题及答案)
  14. dell 服务器 重装Linux系统
  15. 怀旧服服务器维护以后精英怪,《魔兽世界》:看不起怀旧服精英怪,一定吃不了兜着走...
  16. win11磁盘分区怎么分?手把手教会你
  17. RCNN、Fast RCNN、Faster RCNN算法详细介绍
  18. LeetCode.191:关于十进制与二进制的浅薄理解
  19. html创建盒子,HTML 盒子
  20. 操作系统(Operation System, OS)

热门文章

  1. 三星android版本升级包下载,三星Galaxy S21系列系统更新 安卓安全补丁更新到4月1日...
  2. 计算机网络学习笔记(详尽版)
  3. 分布式搜索引擎ElasticSearch之高级运用(三)
  4. import androidx.core.app.Fragment;报红
  5. 5V 3A手机充电器方案
  6. 如何将PDF删除水印?PDF怎么删除水印
  7. java int类型能表示的数值范围
  8. html颜色趋势,预测2015年网页设计配色趋势(4)
  9. 怎么将做个文件做成二维码?扫描二维码展示文件怎么做?
  10. js用正则表达式完成邮箱验证