斐波那契数列

151 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

某天我去腾讯面试,他给我出了一道算法题,我当时还没写出来,题目好像是说假设一对初生羊要一个月才到成熟期,而一对成熟羊每月会生一对羊,那么,由一对初生羊开始,12个月后会有多少对羊呢?

二、思路分析:

题目描述的是一个的场景,那么我们需要把他转换为代码,根据描述我们需要计算得到12个月后有多少对羊。我们先列举前几个月羊的繁殖情况:

假设我们都是从1号开始统计,1.1开始,羊生长需要1个月,那么1月底是初生期的最后一天。2.1统计时羊是成熟期,小羊可能是2月的某一出生,假设2.1统计的时候小羊还没出生,等到3月的时候小羊已经出生了。

1.1 羊生长 12.1 羊繁殖 13.1 成熟期的羊 初生期的羊 24.1 成熟期的羊 初生期的羊 成熟期的羊 3

截屏2022-03-07 上午7.47.24.png

黑色表示成熟期的羊,白色表示初生期的羊,得到的数据结论是 [1, 1, 2, 3, 5, 8, 13],第一个数和第二个数为1,之后的每一个数为之前两个数之和。

var climbStairs = function (n) {
  if (n == 1 || n == 2) {
    return 1
  }
  else {
    return climbStairs(n - 2) + climbStairs(n - 1)
  }
}

因此,羊问题得以解决,答案为144对。以上数列,即“斐波那契数列”。

四、总结:

斐波那契数列的自身特性:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……

第一项和第二项是1,之后的每一项为之前两项的和。即:

a1=a2=1
an=an-1+an-2 (n为正整数)

符合这个规则的数列就是斐波那契数列。

此时我还联想到了爬楼梯算法,该算法并不属于斐波那契数列,第一项和第二项是1和2,之后的每一项为之前两项的和。算法逻辑和之前十分类似。

有n级楼梯,有2种爬法,1次1级,或1次2级,问,n级楼梯有多少种爬法?

var climbStairs = function (n) {
  if (n == 1 || n == 2) {
    return n
  }
  else {
    return climbStairs(n - 2) + climbStairs(n - 1)
  }
}