斐波那契数列

675 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

斐波那契数列

斐波那契数列是另一个常见的数学函数,通常以递归方式定义。“它们像兔子一样繁殖”,通常用于描述说话者认为增长过快的种群。在1202年,意大利数学家比萨的莱昂纳多,也被称为斐波那契,开发了一个公式来量化这个概念,尽管有一些不太现实的假设。

假设一对新出生的兔子,一只雄性和一只雌性,被放在猪圈里(或者更糟糕的是,在野外释放)。进一步假设兔子可以在一个月大的时候交配(令人惊讶的是,有些品种可以)并且有一个月的妊娠期(令人惊讶的是,有些品种确实如此)。最后,假设这些神话中的兔子永远不会死亡(不是任何已知兔子品种的财产),并且雌性从第二个月开始每个月总是产生一对新对(一只雄性,一只雌性)。六个月末会有多少只雌性兔子?

在第一个月的最后一天(称为月o),将有一只雌性(准备在下个月的第一天怀孕)。在第二个月的最后一天,仍然只有一只雌性(因为她要到下个月的第一天才会生孩子)。在下个月的最后一天,将有两名女性(一名怀孕,一名未怀孕)。在下个月的最后一天,将有三名女性(两名怀孕,一名未怀孕)。等等。让我们以表格形式看一下这一过程,图 6-2。

image.png

请注意,对于第 n 个月> 1,女性 (n) = 女性 (n-1)+ 女性 (n-2)。这并非偶然。每个在n-1个月活着的雌性在n个月仍然活着。此外,每个在n-2个月活着的雌性都会在第n个月产生一只新的雌性,新的雌性可以在n-1月添加到雌性中,以获得n月的雌性数量。

图6-2 雌性兔种群增长

人口的增长自然是由复发来描述的

image.png

此定义不同于阶乘的递归定义:

·它有两个基本情况,而不仅仅是一个。通常,我们可以根据需要拥有任意数量的基本情况。

在递归情况下,有两个递归调用,而不仅仅是一个。同样,我们可以随心所欲地拥有尽可能多的数量。

图 6-3 包含斐波那契重复执行的直接实现,43 以及可用于测试它的函数。

image.png

编写代码是解决此问题的简单部分。一旦我们从兔子问题的模糊陈述变成了一组递归方程,代码几乎就自己写了。找到某种抽象的方式来表达手头问题的解决方案通常是构建有用程序中最困难的一步。我们将在本书的后面部分对此进行更多讨论。

正如你可能猜到的那样,这不是野外兔子种群增长的完美模型。1859年,澳大利亚农民托马斯·奥斯汀(Thomas Austin)从英国进口了24只兔子,用作狩猎的目标。有些人逃脱了。十年后,澳大利亚每年约有200万只兔子被枪杀或困住,对人口没有明显影响。这是很多兔子,但远不及第120个斐波那契数列。

虽然斐波那契数列实际上并没有提供兔子种群增长的完美模型,但它确实具有许多有趣的数学性质。斐波那契数列在自然界中也很常见。例如,对于大多数花,花瓣的数量是斐波那契数列。