C#兔子题与斐波那契数列解析

/ 0评 / 0

概述

这次的寒假作业做了一个算是编程里面经典的一道题目,如下

有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每
个月可以生一对小兔子,而一对兔子从出生后第 3 个月起每月生一对小兔子。假如一年内没有发生死亡现象,
那么,一对兔子一年内(12 个月)能繁殖成多少对?
分析:兔子的规律为数列,1,1,2,3,5,8,13,21

仔细观察提供的分析,我们会发现这就是斐波那契数列

作为数学渣的我,想了很久才想出来,我提供一下我的思路来更好的理解这道题目吧。

首先先来看看我的解法:

//定义两个值,一个中间值
int dieA = 1, dieB = 0, dieC = 0;
//定义总和
//忽略一月开始循环运算 12 - 1
for (int i = 0; i < 12; i++)
{
    //A的值给C保管 - A的值等于A+B的值 - C把值丢给B
    dieC = dieA;
    dieA += dieB;
    dieB = dieC;
    Console.WriteLine("第{0}个月:{1}对", i + 1, dieA);
}
Console.WriteLine();
//输出A的值
Console.WriteLine("在十二个月后可以做{0}对红烧兔", dieA);

简述一下我的思路,斐波那契数列的开头是有两个1的,但是这道题第一个月已经有一对兔子了,所以我们提前把dieA的值定为1,运算结果如上。

思路分析

我想了许久,做出来却发现并不难,我把它理解为“推箱子

此时箱子A的值为1,其他两个箱子都为0;

这时候A箱子要向前移动,我们把A的值先交给C保管,此时C = 1;

这时候用B去推动A箱子,A + B的值,也就是1 + 0,然后A前进了一格

这时候就把中间值C的值交给B,让C拖动B上来,B本来是0,现在C给了B,B为1;

此时继续这个步骤,A继续把自己的值重新赋给C,C现在等于1;

此时A向前移动,它加上了B的值,1 + 1 = 2;

这时候B也该跟上来啦,C的值交给B,B此时是A走之前的值,B = C = 1;

此时就很简单了,依次循环下去,每一次都把A的值给输出出来,正好符合了斐波那契数列

A是开路的值,C是中间值,B是用来给A加油的值,这样理解是不是简单多啦?

发表评论

电子邮件地址不会被公开。 必填项已用*标注