「兔了个兔」斐波那契兔子数列

425 阅读2分钟

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

兔子繁衍问题

在关于兔的问题中,最著名的就是数学家莱昂纳多·斐波那契(中世纪意大利数学家)提出的兔子繁殖问题,它描述的是黄金分割数列,现称为斐波那契数列或者兔子数列。问题描述如下:

有一对兔子,从出生后第三个月起每一个月都生一对兔子,小兔子长到第三个月后每一个月又生一对兔子,假设兔子都不死,请问每个月的兔子总数是多少?

问题分析

仔细理解题目含义,当月的兔子对数来源如下:
幼仔对数=前月成兔对数
成兔对数=前月成兔对数+前月幼仔对数
总体对数=本月成兔对数+本月幼仔对数

从第一个月开始,我们将每个月的兔子对数进行初步排列:1,1,2,3,5,8,13...
通过观察发现,每次当月兔子对数都是前两个月兔子对数之和,即
F(0)=1
F(1)=1
当n>=2时,F(n)=F(n-1)+F(n-2)。

代码设计

1.通过scanf函数获取键盘输入的月份数;
2.若月份数不超过2,对于第一个月和第二个月,没有繁殖新兔子,对数为1,直接赋值;
3.若月份数大于2,根据公式rabbitsum[i] = rabbitsum[i-1]+rabbitsum[i-2]进行计算,并使用for循环递归累加;
4.循环执行完毕,得到最后一个月的兔子总对数。

代码实现

这里有点问题,在码上掘金使用scanf函数,并不会等待键盘输入,而是任意给了变量一个值,程序直接执行完毕,不知是不是程序没有运行在本地PC的原因。

因此我将程序放在本地虚拟机进行了测试,结合符合预期:

image.png