青训营X豆包MarsCode 技术训练营第二课 | 豆包MarsCode AI 刷题

84 阅读2分钟

兔群繁殖之谜 原问题描述 如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第 n 个月能繁殖成多少对兔子?(举例,第1个月是1对兔子,第2个月是2对兔子) 可以通过分析兔子繁殖的规律来设计递归函数。兔子在出生两个月后具有繁殖能力,每对兔子每个月能生出一对小兔子,且所有兔子都不死。因此,兔子数量的增长符合斐波那契数列的规律,即每个月的兔子数量是前两个月兔子数量之和。

递归函数设计 递归函数的设计需要考虑以下几个关键点: 1.基本情况:当月份为1或2时,兔子数量分别为1对,因为此时还没有兔子可以繁殖。 2.递归关系:每个月的兔子数量是前两个月兔子数量之和,即rabbit(n) = rabbit(n-1) + rabbit(n-2)。 通过列表和循环来计算每个月的兔子数量,并输出每个月的总数量以及不同年龄段的兔子数量。初始时,第一月有一对兔子,第二月有一对成熟的兔子,从第三个月开始,每个月的兔子数量是前一个月新生兔子和前两个月成熟兔子的总和。 兔子在出生两个月后开始繁殖,每个月生出一对小兔子。具体来说:

  • 第1个月:1对兔子(假设为初始兔子对)
  • 第2个月:1对兔子(因为第1个月的兔子还没有繁殖能力)
  • 第3个月:2对兔子(第1个月的兔子开始繁殖)
  • 第4个月:3对兔子(第2个月的兔子开始繁殖)
  • 以此类推,每个月的兔子对数是前两个月的和。 输入格式 数字 输出格式 数字 输入样例 5 输出样例 8 数据范围 [1, 75] 测试数据集 样例1 输入:5 输出:8 样例2 输入:1 输出:1 样例3 输入:15 输出:987 样例4 输入:50 输出:20365011074 题目解析 线性dp

c++代码 int rabbit(int n) { if (n <= 2) { return 1; // 基本情况,第一个月和第二个月各有一对兔子 } else { return rabbit(n-1) + rabbit(n-2); // 递归关系 } }

py代码 def solution(A): f = [0] * (A + 1) # 创建一个大小为 A + 1 的数组 f[0] = f[1] = 1 # 基础情况,f(0) 和 f(1) 都为 1

for i in range(2, A + 1):
    f[i] = f[i - 1] + f[i - 2]  # 动态规划状态转移

return f[A]  # 返回第 A 个斐波那契数