当前位置: 面试刷题>> 森林中的兔子 (经典算法题500道)


题目描述补充

在森林中,有一群兔子,它们按照特定的规则繁殖。具体规则如下:

  1. 初始时,森林中有1对年轻的兔子(即2只兔子)。
  2. 从第二个月开始,每个月每对年轻的兔子都会成长为成熟的兔子对,并且它们会额外生出1对年轻的兔子。
  3. 假设兔子不会死亡,问经过n个月后,森林中总共有多少对兔子?

这个问题是著名的斐波那契数列问题的一个变体,其中斐波那契数列是这样一个数列:每个数是前两个数的和,数列以0和1开始。

示例代码实现

PHP 示例

function fibonacciRabbits($n) {
    if ($n <= 1) {
        return 1; // 初始时1对兔子
    }
    
    $young = 1; // 年轻兔子对数
    $mature = 0; // 成熟兔子对数
    $total = 1; // 总兔子对数
    
    for ($i = 2; $i <= $n; $i++) {
        // 下个月年轻兔子变成成熟兔子,并且每对成熟兔子生出1对年轻兔子
        $newYoung = $mature;
        $mature = $young + $mature;
        $young = $newYoung;
        
        $total = $young + $mature; // 更新总兔子对数
    }
    
    return $total;
}

echo fibonacciRabbits(10); // 示例输出第10个月的兔子对数

Python 示例

def fibonacci_rabbits(n):
    if n <= 1:
        return 1
    
    young, mature = 1, 0
    total = 1
    
    for i in range(2, n + 1):
        new_young = mature
        mature, young = young + mature, new_young
        total = young + mature
    
    return total

print(fibonacci_rabbits(10))  # 示例输出第10个月的兔子对数

JavaScript 示例

function fibonacciRabbits(n) {
    if (n <= 1) {
        return 1;
    }
    
    let young = 1; // 年轻兔子对数
    let mature = 0; // 成熟兔子对数
    let total = 1; // 总兔子对数
    
    for (let i = 2; i <= n; i++) {
        let newYoung = mature;
        mature = young + mature;
        young = newYoung;
        
        total = young + mature;
    }
    
    return total;
}

console.log(fibonacciRabbits(10)); // 示例输出第10个月的兔子对数

码小课网站中有更多相关内容分享给大家学习,包括斐波那契数列的深入解析、其他算法问题解析以及面试技巧等,欢迎访问码小课网站获取更多学习资料。

推荐面试题