斐波那契数列介绍

斐波那契数列介绍

Q:斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?
A:因为斐波那契数列在数学和生活以及自然界中都非常有用

1. 斐波那契数列 概念引入

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

数学上,斐波那契数列以递归的形式进行定义:
F0=0 F1=1 Fn=Fn−1+Fn−
先搞懂经典算法再说吧;
还有几种,以后发达了,在搞懂。
观察数列可得,除了第一项和第二项,所有的数列的值都是前一项和前一项的前一项的加和,转换成函数也就是f(n) = f(n-1) + f(n-2)

 int f1(int n) {
        if(n < 1) {
            return 0;
        }else if(n == 1 || n == 2) {
            return 1;
        }
     
        return f1(n-1) + f1(n-2);
    }

显然,递归n次,时间复杂度O(2^n),太恐怖,所以,必须优化。

先来开看看“兔子数列”以及其他数学应用场景!!
1. 1 兔子数列

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

1.2 排列组合

有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?

2.1 兔子繁殖问题

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

我们不妨拿新出生的一对小兔子分析一下:

第一个月小兔子没有繁殖能力,所以还是一对

两个月后,生下一对小兔对数共有两对

三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对

------

依次类推可以列出下表:
经过月数 1 2 3 4 5 6 7 8 9 10 11 12 …
幼仔对数 1 0 1 1 2 3 5 8 13 21 34 55 …
成兔对数 0 1 1 2 3 5 8 13 21 34 55 89
总体对数 1 1 2 3 5 8 13 21 34 55 89 144

幼仔对数=前月成兔对数

成兔对数=前月成兔对数+前月幼仔对数

总体对数=本月成兔对数+本月幼仔对数

可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数列有关十分明显的特点,那是:

前面相邻两项之和,构成了后一项。
2.2 排列组合
2.2.1 跨楼梯组合

有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?

这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种登法……

1,2,3,5,8,13……所以,登上十级,有89种走法。
2.2.2 掷硬币不连续情形

一枚均匀的硬币掷10次,问不连续出现正面的可能情形有多少种?

答案是:
(1/√5)∗(1+√5)/2(1−√5)/2=144

(1/√5)∗(1+√5)/2(1−√5)/2=144

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114905.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • activiti与flowable的区别

    activiti与flowable的区别免费视频限时抢购:《Activiti6视频教程全家桶》《Flowable系列优惠套餐》《Flowable全家桶》《Camunda教程》《Drool7从入门到精通》在详细说明activiti与flowable的细节区别之前,我们需要说明一下这两个框架的发展史。我在写Activiti权威指南的时候,大概是2016年7月份左右。给清华大学出版社交稿的时候大概在2017年3月份…

    2022年5月11日
    82
  • JavaSE学习随笔(一) Cloneable接口源码分析与技术细节

    JavaSE学习随笔(一) Cloneable接口源码分析与技术细节Cloneable接口是Java开发中常用的一个接口,它的作用是使一个类的实例能够将自身拷贝到另一个新的实例中,注意,这里所说的“拷贝”拷的是对象实例,而不是类的定义,进一步说,拷贝的是一个类的实例中各字段的值。本博文将从Cloneable接口的源码入手,对其技术细节和使用方法进行详细的介绍。

    2022年10月10日
    4
  • Oracle 904_oracle01017

    Oracle 904_oracle01017SQL>desceq_admin.its_earthquake_recover;名前NULL?型—————————————————————————–ORG_INF…

    2022年9月20日
    3
  • 向量的范数和矩阵的范数_矩阵范数与向量范数相容是什么意思

    向量的范数和矩阵的范数_矩阵范数与向量范数相容是什么意思矩阵是什么?我们都知道映射指的是一个空间Rm\mathbb{R}^mRm到另一个空间Rn\mathbb{R}^nRn的变换关系,狭义的函数其实是映射的一种特例,特指实数集间R1\mathbb{R}^1R1的映射关系。在所有映射中,我们最常见的是线性映射,对这种线性映射关系,我们是用矩阵来刻画,比如我们要将一个向量x∈Rmx\in\mathbb{R}^mx∈Rm映射到另外一个空间Rn\…

    2025年11月29日
    11
  • Java + Ajax跨域解决方案整理

    Java + Ajax跨域解决方案整理为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。产生跨域的情况有:1.域名不同,端口也不同;2.域名相同但是端口不同;3.域名不同,端口相同。解决方案:一、JSONP方式1.只支持get方法,不支持postfang方法;使用时需修改前端和后端代码,用起来也不太方便,本文不推荐使用。二、使用springMVC架构的,使用版本4.2以上…

    2022年8月24日
    6
  • 测试用例-单元测试

    测试用例-单元测试单元测试 编写手册 1 简述本文主要针对如何使用 Junit 编写单元测试进行描述文中的实例基于 Junit4 所谓单元测试 即是指针对程序中的一些单元进行测试的方法这些单元在 Junit 中的最小单位为方法借助单元测试 我们可以轻松地单独测试程序中的某一个逻辑片段而不需要在意程序的外部依赖和其它逻辑接口测试单元测试只能以接口为维度进行测试只需被测试的单元逻辑正常即可工程必须编译通过并打包进行部署可以不依赖外部 测试进度不再受制于外部条件工程的外部依赖 数据库 调用

    2025年8月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号