斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,以兔子繁殖为例子而引入,每对兔子每月繁殖一对子兔,而子兔在出生后第二个月就有生殖能力,试问一对兔子一年能繁殖多少对兔子?可以这样思考:第一个月后即第二个月时,1对兔子变成了两对兔子,其中一对是它本身,另一对是它生下的幼兔. 第三个月时两对兔子变成了三对,其中一对是最初的一对,另一对是它刚生下来的幼兔,第三对是幼兔长成的大兔子. 第四个月时,三对兔子变成了五对,第五个月时,五对兔子变成了八对,按此方法推算,第六个月是13对兔子,第七个月是21对兔子„„,裴波那契得到一个数列,人们将这个数列前面加上一项1,成为“裴波那契数列”,即0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:

F(0)=0, 第0月表示没有兔子

F(1)=1,第1月表示只有原始的1对兔子,兔子还没有生育能力

F(2)=1,第2月表示只有原始的1对兔子,兔子还没有生育能力,第3个月生育一对兔子

F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N)
可以使用树形结构来描述,其中最左边的数表示月份,白色的圈表示未成熟的兔子,黑色的圆表示已经成熟,可以生育的兔子。
观察发现,每月已经成熟的兔子数量等于上个月的兔子数量,这是因为一对兔子过了一个月就会成熟,而已经成熟的兔子过了一个月还是成熟的。这样,因为每一对成熟的兔子在下一个月都会生出一对兔子,所以每月兔子增加的数量就是两个月前兔子的数量,这样把每个月兔子的数量排成一个数列,正好是著名的“斐波那契数列”
在这里插入图片描述

第一种:递归方式实现斐波那契数据

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

第二种方式是使用数组来实现斐波那契数列,因为数组的特性和斐波那契数列相似,我们可以创建一个数组,里面存的的是数组的角标,然后根据斐波那契数列的特点,更新数组

   if(n == 0)
    {
        return 0;
    }
    if(n == 1){
        return 1;
    }
    int a[n+1];
     a[0] = 0;
     a[1] = 1;
    for(int i = 2;i < n+1;i++)
    {
        a[i] = a[i-1]+ a[i-2];
       // a[i]=a[i]%1000000007;注释掉之后测试45会出错,放开成功,原因如下
    }
   return a[n];
}

当n很大的时候可能会出现数字溢出,所以我们需要用结果对1000000007求余,但实际上可能还没有执行到最后一步就已经溢出了,所以我们需要对每一步的计算都要对1000000007求余

参考:https://www.pianshen.com/article/228918530/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的修养

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值