斐波那契数列的递推公式:

我们尝试计算斐波那契数列的第n项并输出。

1、递归法

#include<stdio.h>
int fib(int m)
{if(m>=3){return fib(m-1)+fib(m-2);}else{return 1;}
}
int main()
{int n;scanf("%d",&n);printf("%d",fib(n));return 0;}

说明:在主调函数中,只写入输入输出,在fib()函数中实现计算的功能。
实参n把值传递给形参m,函数fib()开始分配内存空间。判断:当m>=3时,返回fib(m-1)+fib(m-2);否则返回1;

例:n=6时 return fib(5)+fib(4); 怎么知道fib(5)和fib(4)的值呢?

fib(5)=fib(4)+fib(3);fib(4)=fib(3)+fib(2);fib(3)=fib(2)+fib(1);

ok!通过递推我们得到了fib(3)的值,这样,fib(4)、fib(5)的值也就得到了。

n为其他值时类似。

2、迭代法

#include<stdio.h>
int fib(int m)
{if (m==1||m==2)return 1;int a=1,b=1,aw=0;while(m>=2){aw=aw+a;a=b;b=aw;m=m-1;}return aw;}
int main()
{int n;scanf("%d",&n);printf("%d",fib(n));return 0;}

说明:主调函数同上,这一次在fib()里使用迭代的方法计算该数列。
通过递推公式我们不难看出,

设n=6,

fib(5)=fib(4)+fib(3);fib(4)=fib(3)+fib(2);fib(3)=fib(2)+fib(1);

倒过来看,可以将斐波那契数理解为前数的加和等于后数,则从第一项开始推起,每次向前叠加一个数,直到找到需要的项数。

while(m>=2){aw=aw+a;a=b;      //将前数的值赋给a,当前数赋给b,下一次循环时再相加。b=aw;    //b在这里起到中介容器的作用m=m-1;   //计数器}

3、数组法
与前两种方法类似,都是根据递推公式自上而下或自下而上递推出斐波那契数。引入数组的好处时,可以将计算出的数储存起来,方便在其他地方直接打印或调用。

#include<stdio.h>
int fib(int m)
{int i;int bank[101]={0,1,1};for(i=2;i<=m;i++)   //注意避免数组越界 {bank[i]=bank[i-1]+bank[i-2];   //从第一位斐波那契数起,算一个存一个 }return bank[m];}
int main()
{int n;scanf("%d",&n);printf("%d",fib(n));return 0;}

说明:数组的做法显然更占用内存,而且如果要计算非常大的斐波那契数列的时候,越界就很难避免。

C语言中经典算法——斐波那契数列的几种算法相关推荐

  1. “斐波那契数列”的两种算法

    "斐波那契数列"的两种算法 斐波那契数列有个规律:从第三个数开始,每个数是前两个数之和,比如: 1 1 2 3 5 8 13 21 34 55...... 现在通过两种方式(递归与 ...

  2. php算法求出兔子数列,PHP算法:斐波那契数列的N种算法

    前言 前段时间,遇到优化计算斐波那契数列的常规递归方法,但是一时间并没有及时想到很好的方法,所以后面查找了相关资料,总结了多种计算解法,所以分享出来,和大家一起交流学习. 斐波那契数是什么 斐波那契数 ...

  3. html5斐波那契数列,经典的斐波那契数列与arguments.callee

    经典的斐波那契数列与arguments.callee HTML5学堂:提到斐波那契数列,很多人还不是太清楚,但是如果提到兔子繁殖这个经典题目,相信学过计算机语言的人们会立刻感觉"亲切&quo ...

  4. Python中斐波那契数列的四种写法

    在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...

  5. Java数据结构与算法---斐波那契数列Fibonacci

    Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...

  6. 斐波拉契数列 Java三种实现

    对于很多Java初学者来说,求解斐波拉契数列,基本上所使用的方式都是递归.对于求解斐波拉契数列来说,递归的实现方式的效率是极其低下的. 在此,我贴出三种实现(递归,迭代,动态规划): 我们先看代码的执 ...

  7. 经典算法——斐波那契数列

    斐波那契数列的经典解法是采用递归的方式: f(n)=f(n-1)+f(n-2)   n>2 f(1)=1      n=1 f(2)=1      n=2 按照这个思路可以写出递归算法: #in ...

  8. C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)

    众所周知,斐波那契数列是非常经典的一个数列,它的数学公式如下 为了便于观察,我们列出它的几项:0  1  1  2  3  5  8  13  21...... 下面我们将介绍四种方法来用C语言计算机 ...

  9. 最优化算法-斐波那契数列搜索

    斐波那契数列搜索,参考Edwin<最优化导论>第四版7.3章节,算法采用go语言实现. /****************************************** FileNa ...

最新文章

  1. 他让张一鸣登门请教,培养出戴文渊李沐陈天奇,创建了传说中的上海交大ACM班...
  2. Python 生成MYSQL inser语句
  3. jbuilder2006注册机
  4. 谷歌 Daydream 实验室:VR中学习新技能是一种怎样的体验?
  5. IDEA创建方法时快速添加注释
  6. 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
  7. mariadb设置root初始密码
  8. 使用jQuery Treeview插件实现树状结构效果
  9. 计算机设计大赛国奖作品_2. 报名材料
  10. python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)
  11. python 获取浏览器句柄下的网页控件,Python获取浏览器窗口句柄过程解析
  12. [Python] 索引序列函数:enumerate() / enumerate(sequence, start=0)
  13. Oracle启动报错ORA-03113解决
  14. 如何解除电子书DRM限制
  15. Spark History Server 没有生效
  16. 如何判断一个APP页面是原生的还是H5页面
  17. 51单片机之系统指令
  18. EXCEL校验身份证号码和银行卡号
  19. 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子
  20. Kotlin+Retrofit + MVVM 的网络请求框架的封装

热门文章

  1. 一篇文带你使用vue完成一个完整后台
  2. step(stp)文件导入ANSYS 2020 R2 workbench Geometry的方法
  3. 联机棋类游戏《憋尿罐》实现源码
  4. 智慧公交站台:EasyCVR智能视频平台助力城市智慧交通建设
  5. 新浪与Google(谷歌)结成战略合作伙伴关系
  6. 如何用电脑画平面坐标图_如何在WORD或者EXERL上画坐标图?
  7. 如何利用Qt 3D 渲染与 Qt Quick 2D 元素结合创建太阳系行星元素?
  8. js制作的炫酷3D太阳系行星运行效果
  9. 栈和队列以及线性表的区别
  10. Linux之 prefix 命令