c语言斐波那契数列递归数组,C语言数据结构学习:递归之斐波那契数列
自己对递归还是不太熟练,于是做的时候就很吃力,就是翻棋子直到棋盘上所有棋子的颜色一样为止,求最少翻多少次,方法是枚举递归。然后就打算先做另一道递归的题(从数组中取出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
intmain()
{
intf1,f2;
intmonth,ct;
printf("请输入月份:");
scanf("%d",&month);
if(month<=2)
printf("两只。\n");
if (month> 2)
{
f1=f2= 1;
ct= 0;
while(ct
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",f1);
}
}
return 0;
}
其实这个代码离递归就差一步,很接近了。但是我当时完全没有想到。
这是我重新修改之后的代码:
#include
long Fibonacci(n)
{
if (n> 2)
return Fibonacci(n-1)+Fibonacci(n-2);
else
return 1;
}
intmain()
{
longnum;
intmonth;
printf("请输入月份:");
scanf("%d",&month);
num= Fibonacci(month);
printf("这个月的兔子对数为%d.\n",num);
return 0;
}
只是很简单的修改,但是代码就整洁易懂了很多,也学到了新内容。
c语言斐波那契数列递归数组,C语言数据结构学习:递归之斐波那契数列相关推荐
- c语言斐波那契数列递归数组,c语言斐波那契数列递归法
斐波那契数列递归 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为&quo ...
- c语言有一个已经排好的数组,C语言有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中...
C语言有一个已经排好序的数组.现输入一个数,要求按原来的规律将它插 入数组中 main() {inta[11]={1,4,6,9,13,16,19,28,40,100};inttemp1,temp2, ...
- c语言程序定义不知数量的一维数组,c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组.ppt...
c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组 * 临沂大学汽车学院:韩晓翠 第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组 授课要点 数组的概念 一维 ...
- 算法:分治策略和递归1 | 通过迭代来学习递归
文章目录 分治策略和递归 分治策略的步骤 示例1:阶乘问题 示例2:打印数组的值 示例3:在数组中查找目标值 分治策略和递归 分治策略: 是将规模比较大的问题可分割成规模较小的相同问题.问题不变,规模 ...
- c语言如何用指针操作一维字符数组,C语言中数组和指针的互操作
C是一种怀旧的语言,因为它的历史很久远,然而自从各种面向对象的编程语言的相续出现让它的影响力日减.当然了,这是无可非议的,但是C的高效性是其他语言无妨比拟的,所以我们有必要把握其中的精华与奥妙,也就有 ...
- 用递归调用法求斐波那契函数_进阶版:面试官问你斐波那契数列的时候不要高兴得太早...
增加内容 递归改进版 矩阵快速幂解法 通项表达式解法 列表法 斐波那契数列应用 前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了.如果真这么想,那就危险了. 递归 ...
- python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...
经典递归 汉诺塔问题 背景故事 传说印度某间寺院有三根柱子,上串64个金盘.寺院里的僧侣依照一个古老的预言,以上述规则移动这些盘子:预言说当这些盘子移动完毕,世界就会灭亡.这个传说叫做梵天寺之塔问题( ...
- 【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)
递归(Recursion) 什么是递归? 函数的调用过程(栈空间) 函数的递归调用过程 递归实例分析(1 + 2 + 3 + ... + 100 的和) 递归的基本思想.使用套路 斐波那契数列 fib ...
- 数据结构三大查找算法(二分查找、插值查找、斐波那契数列查找)C语言实现
文章目录 查找 二分查找(折半查找) 插值查找 斐波拉契查找 总结: 查找 查找是在大量的信息里面寻找一个特定的信息元素 (1)静态查找和动态查找: 静态或者动态都是针对查找表而言的.动态表指查找表中 ...
最新文章
- 解决jupyter中无自己创建的虚拟环境
- 记真实自己,炫精彩人生---《爱记》app使用体验
- php中为什么要用heade定义头,有什么应用场景
- offset linux,Linux 宏定义之 offsetof 与 container_of(十九)
- FreeRTOS系列第2篇---FreeRTOS入门指南
- JDK源码分析:Byte.java
- 【文摘】 雪念——作者:蓝色妖姬
- centos 6 安装mysql,CentOS6.5安装MySQL教程(完整教程)
- ASP.NET Core 3.0 发布
- linux进程自动启动,linux 嵌入式 自启动 系统自动登录-自动启动程序或脚本
- adb shell操作文件
- C#给Winform的button等控件添加快捷键三种方法
- mono:利用wxWindows开发界面程序
- 云操作系统,是真的吗?(译文)
- 项目管理网络图概念总结
- 百度的疯狂 UC的隐忍
- [codeforces 1324C] Frog Jumps 一直向右+边界处理
- [转载] UEFI+GPT双硬盘安装Win10+Ubuntu16.04双系统
- 利用pandas读取Excel文件数据
- 剖析Mozilla代码之七武器
热门文章
- dep指定版本 go_Go 包管理工具-dep
- axure树形表格_Axure教程:可增删改的树型结构
- QT使用VLD检测内存泄漏
- PDM系统的产品结构管理与版本控制
- mysql的binlog意义_带你解析MySQL binlog
- Failed to create AppDomain 'xxx'. Exception has been Failed to create AppDomain
- Shell中判断文件,目录是否存在
- [UIImage resizableImageWithCapInsets:]使用注意
- SSH Tunnel扫盲(ssh port forwarding端口转发)
- iOS SQLite语法基础