兔子数列

兔子数列的起源

公元13世纪,在意大利有一位天才的数学家名字叫斐波那契,他在一本《算盘之书》的著作里记载了这样一道数学题:有一对兔子,每一个月可以生下一对小兔子,而且假定小兔子在出生的第二个月便有生育能力,那么过一年后,问一共能有多少对兔子?假设每产一对必须是一雌兔一雄兔,并且所有的兔子都能进行相互交配,所生下来的兔子都能保证成活率。究竟有多少对呢?
我们不妨拿新出生的1对小兔子分析:
第1个月,小兔子①没有繁殖能力,所以还是1对。
第2个月,小兔子①进入成熟期,仍然是1对。
第3个月,兔子①生了1对小兔子②,于是这个月共有2(1+1=2)对兔子。
第4个月,兔子①又生了1对小兔子③。因此共有3(1+2=3)对兔子。
第5个月,兔子①又生了1对小兔子④,而在第3个月出生的兔子②也生下了1对小兔子⑤。共有5(2+3=5)对兔子。
第6个月,兔子①②③各生下了1对小兔子。新生3对兔子加上原有的5对兔子这个月共有8(3+5=8)对兔子。
……
经过分析,这个数列的特点十分明显,从第3个月开始,当月的兔子数=上月兔子数+上上月兔子数。
而这就被称为兔子数列,为了纪念数学家斐波那契,此数列又被称为斐波那契数列。

兔子数列的数学公式

将兔子数列转换成数学公式,如下:

兔子数列的C语言代码

注:代码均未考虑数值溢出。
考虑到兔子数列经常能够使用到,我们这里将其封装成一个函数。而在实现函数之前,我们要先创建函数环境。

兔子数列的函数环境

函数环境:

#include <stdio.h>
int Fib(int );//函数声明
int main()
{int n = 0;//第n个斐波那契数scanf("%d", &n);int ret = Fib(n);//调用函数printf("ret = %d", ret);//打印结果return 0;
}

兔子数列函数的具体实现

递归版本

递归版本:
根据上面的数学公式,我们很容易就可以想到用递归的方法实现,递归方法的优点是容易想到,但是缺点也比较明显,效率低下,当n过大时,调用次数过多,计算所需时间过长。

int Fib(int n)//版本1 - 递归版本
{if (n == 1 || n == 2){return 1;}else{return (Fib(n - 1) + Fib(n - 2));}
}

迭代版本

迭代版本:
函数代码如下:

int Fib(int n)//版本2 - 迭代版本
{int fib1 = 1;//F(1) = 1int fib2 = 1;//F(2) = 1int i = 0;for (i = 2; i < n; i++)//采用迭代的方式{int temp = fib2;//借用中间变量记录fib2的值fib2 = fib1 + fib2;fib1 = temp;}return fib2;
}

示例:

运行结果

运行结果:

兔子数列你了解了吗!

兔子数列 - C语言相关推荐

  1. 兔子繁殖问题(斐波那契数列c语言版)

    问题描述 兔子繁殖问题是一个经典的c语言问题,其大概内容如下: 著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对 ...

  2. c语言 兔子数列螺线图,经典算法大全51例——2.斐波那契数列(兔子数列)

    经典算法大全51例--2.斐波那契数列 算法目录合集 地址 说明 题目 原理分析 代码实现--Java 相关题目其他变形: 1.爬楼梯(来源:力扣LeetCode) 2.兔子成熟期拉长 官方题解 分析 ...

  3. OJ1055: 兔子繁殖问题(C语言计算斐波那契数列/“兔子数列”)

    题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规律,假设没有兔 ...

  4. C语言入门——兔子数列

    古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子 长到第三个月后每个月又生一对兔子,假如兔子都不死, 问每个月的兔子总数为多少? 解读: 斐波那契数列(Fibonacci ...

  5. 【C语言】案例二十五 兔子数列(斐波那契数列)

    案例描述 兔子数列又称斐波那契数列,黄金分割数列,具体描述如下:一对兔子在出生两个月后,每个月都能生出一对小兔子,现有一对刚出生的兔子,假设所有兔子都不死,那么一年后有对少只兔子? 案例分析 n表示月 ...

  6. 【C语言】斐波那契数列,兔子数列

    斐波那契额数列,即兔子数列 1,1,2,3,5,8-- 从第三项起,每一项是前两项的和. 一.第一种,采用递归方法 此方法比较好理解 #include<stdio.h> int fib(i ...

  7. C语言完成兔子数列(斐波那契数列)

    斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...

  8. 从兔子数列延伸到递归函数的知识

    ​学习之道,重在实践.尤其是像编程这类的技术活,更需要日积月累的实操,不断地试错,发现问题,解决问题.这样一来,编程技术才会真正地有所提升. 因此,C语言学习系列暂时缓一天,做些练习题,让脑子回顾一下 ...

  9. 兔子数列python编程分析_九九乘法,兔子数列,杨辉三角|用Python生成器的妙解...

    很多同学还是对生成器的用法,感到怀疑,特别是有其他语言基础的同学,一下子很难理解和转换过来,那什么情况下会用到yield,建议是当需要在循环过程中依次处理一个序列中的元素的时候,就应该考虑生成器,其实 ...

最新文章

  1. android.graphics.Paint方法setXfermode (Xfermode x...
  2. 从具体案例了解知识图谱
  3. DB9公母头引脚定义
  4. 485通讯转换器产品功能特点介绍
  5. discuz viewthread.php,修改discuz论坛的标题header和footer
  6. android digest 认证,探究 Android 签名机制和原理
  7. 配置WINDOWS群集
  8. 异构计算完全解析-CSDN.NET
  9. 获取FileUpload上传的文件大小
  10. 第三代计算机的内存使用是什么,lpddr3内存什么意思
  11. 自制hdmi线一头改vga图_最全VGA、DVI、PS/2、USB等接头详解焊接方法
  12. 【web素材】11—15套免费网站后台管理模板
  13. SegmentFault 社区访谈 | Felix:一个如同空气般存在的人
  14. 36. linux系统日志在哪里看
  15. python可以做ui吗_python做ui
  16. 蚂蚁的愤怒之源-上篇
  17. 【linux】循序渐进学运维-基础篇-linux运维级别
  18. 安装pycrypto,windows10,全解
  19. mysql .xb文件恢复
  20. 记录mysql模糊查询索引问题

热门文章

  1. Anaconda配置强化学习环境
  2. Unity中的矩阵含义
  3. go down to用法
  4. 向日葵 11.0.0.34335 中文版 (老牌国产远程控制软件)
  5. ubuntu终端字体大小和窗口大小设置
  6. Unix/BSD/Linux的口令机制初探(转)
  7. 手动型三轴五档手动变速器设计(设计说明书+CAD图纸+外文翻译)
  8. 【图像分割】基于matlab扩散张量成像(DTI)脑白质纤维束成像【含Matlab源码 2174期】
  9. eclipse改成护眼背景色
  10. Windows XP系统中如何屏蔽 Ctrl+Alt+Del、Alt+Tab以及Ctrl+Esc键序列