C语言中经典算法——斐波那契数列的几种算法
斐波那契数列的递推公式:
我们尝试计算斐波那契数列的第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 2 3 5 8 13 21 34 55...... 现在通过两种方式(递归与 ...
- php算法求出兔子数列,PHP算法:斐波那契数列的N种算法
前言 前段时间,遇到优化计算斐波那契数列的常规递归方法,但是一时间并没有及时想到很好的方法,所以后面查找了相关资料,总结了多种计算解法,所以分享出来,和大家一起交流学习. 斐波那契数是什么 斐波那契数 ...
- html5斐波那契数列,经典的斐波那契数列与arguments.callee
经典的斐波那契数列与arguments.callee HTML5学堂:提到斐波那契数列,很多人还不是太清楚,但是如果提到兔子繁殖这个经典题目,相信学过计算机语言的人们会立刻感觉"亲切&quo ...
- Python中斐波那契数列的四种写法
在这些时候,我可以附和着笑,项目经理是决不责备的.而且项目经理见了孔乙己,也每每这样问他,引人发笑.孔乙己自己知道不能和他们谈天,便只好向新人说话.有一回对我说道,"你学过数据结构吗?&qu ...
- Java数据结构与算法---斐波那契数列Fibonacci
Java数据结构与算法-斐波那契数列Fibonacci 原理都很简单,直接上代码: package cn.m_fibonacci;public class Fibonacci {public stat ...
- 斐波拉契数列 Java三种实现
对于很多Java初学者来说,求解斐波拉契数列,基本上所使用的方式都是递归.对于求解斐波拉契数列来说,递归的实现方式的效率是极其低下的. 在此,我贴出三种实现(递归,迭代,动态规划): 我们先看代码的执 ...
- 经典算法——斐波那契数列
斐波那契数列的经典解法是采用递归的方式: f(n)=f(n-1)+f(n-2) n>2 f(1)=1 n=1 f(2)=1 n=2 按照这个思路可以写出递归算法: #in ...
- C语言实现求解斐波那契数列的四种方法及优化处理(递归,迭代,特殊性质公式,矩阵快速幂)
众所周知,斐波那契数列是非常经典的一个数列,它的数学公式如下 为了便于观察,我们列出它的几项:0 1 1 2 3 5 8 13 21...... 下面我们将介绍四种方法来用C语言计算机 ...
- 最优化算法-斐波那契数列搜索
斐波那契数列搜索,参考Edwin<最优化导论>第四版7.3章节,算法采用go语言实现. /****************************************** FileNa ...
最新文章
- 他让张一鸣登门请教,培养出戴文渊李沐陈天奇,创建了传说中的上海交大ACM班...
- Python 生成MYSQL inser语句
- jbuilder2006注册机
- 谷歌 Daydream 实验室:VR中学习新技能是一种怎样的体验?
- IDEA创建方法时快速添加注释
- 计算机里FC方式,【计算机基础】在0和1的世界里来来回回
- mariadb设置root初始密码
- 使用jQuery Treeview插件实现树状结构效果
- 计算机设计大赛国奖作品_2. 报名材料
- python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)
- python 获取浏览器句柄下的网页控件,Python获取浏览器窗口句柄过程解析
- [Python] 索引序列函数:enumerate() / enumerate(sequence, start=0)
- Oracle启动报错ORA-03113解决
- 如何解除电子书DRM限制
- Spark History Server 没有生效
- 如何判断一个APP页面是原生的还是H5页面
- 51单片机之系统指令
- EXCEL校验身份证号码和银行卡号
- 如何用python画数学图案_使用Matplotlib 绘制精美的数学图形例子
- Kotlin+Retrofit + MVVM 的网络请求框架的封装