C语言 计算斐波那契数列

article/2025/10/20 16:06:09

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示意图
直接用递归来求解斐波那契数列的流程如上图所示(以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]

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


http://chatgpt.dhexx.cn/article/JER487xr.shtml

相关文章

c语言数组的斐波那契数列

c语言数组的斐波那契数列 核心思想&#xff1a;后一项是前一项的和 a[i]a[i-1]a[i-2]&#xff1b; 题干 转换为代码 #include<stdio.h> int main() {int i,n,a[20]{1,1};scanf("%d",&n);if(n<2)printf("%d",1);else{for(i2;i<n;i)a[i]a…

C语言数组之斐波那契数列

目录 一、斐波那契数列是什么&#xff1f; 二、代码展示 1.斐波那契数列 2.冒泡排序 总结 一、斐波那契数列是什么&#xff1f; 斐波那契数列指的是这样一个数列&#xff1a;1、1、2、3、5、8、13、21、34、……在数学上&#xff0c;斐波那契数列以如下被以递推的方法定义…

斐波那契数列c语言实现 每行五个输出

斐波那契数列 指的是这样一个数列&#xff1a; 0 1 1 2 3 5 8 13 21 34 55 89 144 233… 这个数列从第3项开始&#xff0c;每一项都等于前两项之和。 设计思路&#xff0c;考虑到数列是从第三项开始呈现规律&#xff0c;故将前两项先定义&#xff0c;第三项设为变量。 后续通过…

斐波那契数列C语言实现

斐波那契数列(Fibonacci) 斐波那契数列&#xff08;意大利语: Successione di Fibonacci)&#xff0c;又称黄金分割数列、费波那西数列、费波拿契数、费氏数列&#xff0c;指的是这样一个数列&#xff1a;0、1、1、2、3、5、8、13、21、……在数学上&#xff0c;斐波纳契数列以…

斐波那契数列C语言

1.斐波那契数列是指这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xff0c;89..... 这个数列从第3项开始&#xff0c;每一项都等于前两项之和。 主要思想&#…

斐波那契数列C语言设计步骤,斐波那契数列c语言函数

(C语言)用递归方法编写CSS布局HTML小编今天和大家分享斐波那契数列的函数 用递归方法编写CSS布局HTML小编今天和大家分享斐波那契数列的函数&#xff0c;返回值为长整型。斐波那契数列的#include long func(long n) { if(n0||n1)return n; else return func(n-1)func(n-2); } m…

C语言斐波那契数列

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;…

斐波那契数列【C语言实现】

1. 定义&#xff1a; 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样…

【C语言】斐波那契数列

一.斐波那契数列是什么&#xff1f; 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xf…

用C 语言实现斐波那契数列

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称“黄金分割”数列&#xff0c;比如这样一个数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;5&#xff0c;8&#xff0c;13&#xff0c;21&#xff0c;34&#xff0c;55&#xf…

免费且好玩的API接口

其实很多小伙伴都在寻找一些免费的好用的API接口&#xff0c;下面就来介绍一些好用的并且稳定的API接口吧。 1.聚合数据 聚合数据网站提供的接口可以说是非常的多&#xff0c;并且很多都是免费使用&#xff0c;虽然有次数的限制&#xff0c;但是用来进行简单的测试或者日常使…

分享笔趣阁、宜搜等小说免费API接口

背景 因为有一些js基础&#xff0c;开始是想学python的爬虫的&#xff0c;后来觉得python爬虫没用。因为我是想用爬虫去爬一些api接口的。爬虫真的太low了……有点鸡肋&#xff08;勿喷&#xff09; 然后为了爬api接口&#xff0c;我就去学抓包&#xff0c;2天速成&#xff0…

几个免费API接口分享,调用完全不限次数...

点击上方蓝色“终端研发部”&#xff0c;选择“设为星标” 学最好的别人&#xff0c;做最好的我们作者 : ishxiao 来源&#xff1a;blog.csdn.net/ishxiao/article/details/53839061 各类无次数限制的免费API接口整理&#xff0c;主要是聚合数据上和API Store上的一些&#xff…

快速拥有自己的网易云免费API接口

操作简单&#xff0c;快速拥有自己的网易云api接口。 https://binaryify.github.io/NeteaseCloudMusicApi/#/?id%e6%ad%8c%e6%89%8b%e7%83%ad%e9%97%a850%e9%a6%96%e6%ad%8c%e6%9b%b2 此链接为网易云开发接口文档&#xff0c;拥有自己的api后就可以结合它进行令人兴奋的操作…

超百个免费api接口,分享给你

API&#xff08;应用程序编程接口&#xff09; API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定。目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程…

50多个免费 API 接口分享

1 背景 此前时不时会有一些研发小伙伴和我诉苦&#xff0c;说很多企业由于人力财力限制或者需求不强&#xff0c;会直接购买使用第三方的开放API&#xff0c;这样一来&#xff1a; 一则由于开放项目不是量身定制的&#xff0c;寻找自己合适的接口也要搜索调研蛮多时间。二则这种…

超全开放 API 免费调用,这款 API 管理工具太香了!

01 此前时不时会有一些研发小伙伴和我诉苦&#xff0c;说很多企业由于人力财力限制或者需求不强&#xff0c;会直接购买使用第三方的开放API&#xff0c;这样一来&#xff0c; 一则由于开放项目不是量身定制的&#xff0c;寻找自己合适的接口也要搜索调研蛮多时间。 二则这种合…

免费实用的API接口

本文分为两个部分&#xff0c;第一部分是平台的接口汇总&#xff0c;第二部分是非常实用的单个的接口汇总。 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore) 3、webxml&#xff08;确实不错&#xff09;WebXml…

整理一些完全免费开放的API接口

前言 在开发测试阶段&#xff0c;或者是在写Demo的时候&#xff0c;难免会用到一些测试数据&#xff0c;有时苦于没有可用的接口&#xff0c;需要自己动手去写&#xff0c;但是这样大大降低了效率&#xff0c;前期我也找了一些开放的接口&#xff0c;这篇文章整理一下&#xff…

一些真正免费的API接口

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 1. JSONPlaceholder2. Fake Store API3. Unsplash API4. Quotes API5. RandomUser6. Coingecko API 集成服务有助于提高开发人员的开发性能并节省大量时间…