C语言数据结构递归之斐波那契数列

因为自己对递归还是不太熟练,于是做POJ1753的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归。然后就打算先做另一道递归的题(从数组中取出n个元素的组合),但是同样在递归的问题上不太理解。好吧,于是复习CPP,在第229页的时候,看到了斐波那契数列,回想起之前做过的一道题目,发现可以用递归的方法来做。于是决定优化一下之前的代码。

以下这段摘自《C primer plus》

斐波那契数列的定义如下:第一个和第二个数字都是1,而后续的每个数字是其前两个数字之和,例如,数列中前几个数字是1,1,2,3,5,8和13。…下面我们创建一个函数,它接受一个正整数n作为参数,返回相应的斐波那契数值。

首先,关于递归深度,递归提供了一个简单的定义。如果调用Fibonacci(),当n为1或2时Fibonacci(n)应返回1;对于其他数值应返回Fibonacci(n-1)+Fibonacci(n-2);

long Fibonacci(n)

{

if (n > 2)

return Fibonacci(n-1)+Fibonacci(n-2);

else

return 1;

}

然后是兔子总数问题。

有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后又生一对兔子,假如兔子都不死,每个月兔子对数为多少?

思考这道题的时候,如果你简单的推算一下,会发现兔子每个月的对数就是斐波那契数列。

第一个月:1对;

第二个月:1对;

第三个月:2对;

第四个月:3对:

第五个月:5对:

第六个月:8对;

……

我之前做这道题的时候,觉得思路很简单,就是从第三个月起,求每个月的兔子数时,只要把这个月的前两个月总数相加。

这是我之前的代码,用f1和f2表示月。:

#include

int main()

{

int f1,f2;

int month,ct;

printf("请输入月份:");

scanf("%d",&month);

if(month<=2)

printf("两只。\n");

if (month > 2)

{

f1 = f2 = 1;

ct = 0;

while(ct < month -2){

f1 = f1+f2;

ct += 1;

f2 = f1+f2;

ct += 1;

}

if (month %2 == 0){

printf("第 %d 个月的兔子对数为:%d.\n",month,f2);

}

if (month %2 == 1){

printf("第 %d 个月的兔子对数为:%d.\n",month,f1);

}

}

return 0;

}

其实这个代码离递归就差一步,很接近了。但是我当时完全没有想到。

这是我重新修改之后的代码:

#include

long Fibonacci(n)

{

if (n > 2)

return Fibonacci(n-1)+Fibonacci(n-2);

else

return 1;

}

int main()

{

long num;

int month;

printf("请输入月份:");

scanf("%d",&month);

num = Fibonacci(month);

printf("这个月的兔子对数为%d.\n",num);

return 0;

}

只是很简单的修改,但是代码就整洁易懂了很多,也学到了新内容。

工欲善其事必先利其器,共勉。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

斐波那契数列c语言while,C语言数据结构递归之斐波那契数列相关推荐

  1. 【斐波那契数列及螺线 基于C语言】

    斐波那契数列及螺线 基于C语言 斐波那契数列:fn = f(n-1)+f(n-2),(n>=3),f1=1,f2=1 用语言描述,就是任何一项都是前面两项的和,第一项是1,第二项是1,第三项开始 ...

  2. C语言以递归求斐波那契数列(附完整源码)

    递归求斐波那契数列 递归求斐波那契数列完整源码(定义,实现,main函数测试) 递归求斐波那契数列完整源码(定义,实现,main函数测试) #include <locale.h> #inc ...

  3. Interview:算法岗位面试—上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点—斐波那契数列、八皇后问题、两种LCS问题

    ML岗位面试:上海某公司算法岗位(偏机器学习,互联网金融行业)技术面试考点之数据结构相关考察点-斐波那契数列.八皇后问题.两种LCS问题 Interview:算法岗位面试-上海某公司算法岗位(偏机器学 ...

  4. 用递归调用法求斐波那契函数_进阶版:面试官问你斐波那契数列的时候不要高兴得太早...

    增加内容 递归改进版 矩阵快速幂解法 通项表达式解法 列表法 斐波那契数列应用 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归 ...

  5. C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

    C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈 分享到: QQ空间 新浪微博 腾讯微博 豆瓣 人人网 递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特 ...

  6. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器...

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立:val = 1else:val = 2 改成三元运算 val = 1 if 条件成立 else 2 ...

  7. 递归实现斐波那契数列

    关于递归求斐波那契数列 首先明白斐波那契数列的特点 即从第三个数开始,数列中的每一项等于其前两项之和,且其前两项都为1 了解其特征后,选择合适的算法解决 这里采用的是经典的递归算法 什么是递归算法? ...

  8. 斐波那契数列c++代码_轮到你了,斐波那契数列!

    前阵子,日剧"轮到你了"终于大结局了,虽然结局有点一言难尽,但黑岛和二阶堂两个学霸之间的爱情,还是很甜呢呐!两个学霸之间的默契的斐波那契数列也被许多网友认为是凶手行凶的依据.到底这 ...

  9. Python:递归输出斐波那契数列

    今天学习Python的时候做一道练习题,题目是这样的: 题目 导入 问题 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数 ...

  10. 使用递归解决斐波那契数列的性能问题

    使用递归解决斐波那契数列的性能问题 参考文章: (1)使用递归解决斐波那契数列的性能问题 (2)https://www.cnblogs.com/mlw1814011067/p/9439651.html ...

最新文章

  1. java表或视图不存在_Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在...
  2. 百亿级日志系统架构设计及优化
  3. mockmvc get请求 tm的 一直404_面试:SpringMVC在接收到请求后的调用细节是什么?
  4. java post流_Java后端HttpClient Post提交文件流 及服务端接收文件流
  5. 模拟3个人排除买票,每人买1张票。售货员只有1张五元的钱,电影票5元一张
  6. openlayers地图旋转_OpenLayers的使用---- 一个完全免费开源的地图JS库
  7. Linux系统编程下做一个简易的shell
  8. Java程序员最常用的20%技术总结
  9. 基于JAVA+SpringMVC+Mybatis+MYSQL的车库管理系统
  10. 如何在Dev-Cpp中使用C++11中的函数:stoi、to_string、unordered_map、unordered_set、auto
  11. 【Python数据分析】时间序列分析——AR/MA/ARMA/ARIMA
  12. ESP分区引导文件修复bcdboot .exe
  13. 互联网大厂的“中台战略”到底是什么?
  14. OLT、ONU、路由器和交换机区别
  15. VirtualBox的vmdk文件压缩
  16. matlab弹奏旋律(发声)笔记
  17. 导数——平均变化率与瞬时变化率
  18. codeforces C - Dwarves, Hats and Extrasensory Abilities
  19. linux系统变双屏,Ubuntu Linux下双屏显示解决方案
  20. 梁凯恩,下一个奇迹——八个关键创造奇迹

热门文章

  1. 页面无法自动播放音频的解决方案
  2. Redis数据结构之——sds
  3. 输出图形(循环程序,任意字符) 三角形、矩形、平行四边形、菱形
  4. 美金融犯罪执法局文件遭泄露:汇丰、摩根大通、渣打等国际大行涉嫌非法转移资金...
  5. 使用ftp传输文件到arm板
  6. 服务器托管单线、双线以及多线如何区别
  7. 【Codeforces】2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) A Adjoin the Netwo
  8. DC-DC隔离电源模块与非隔离电源模块有什么区别?
  9. 计算GPS坐标的直线距离
  10. html 设计尺寸,多少像素才合适 网页设计标准尺寸大讲解