问题描述
生物学家小 R 正在研究一种特殊的兔子品种的繁殖模式。这种兔子的繁殖遵循以下规律:
- 每对成年兔子每个月会生育一对新的小兔子(一雌一雄)。
- 新生的小兔子需要一个月成长,到第二个月才能开始繁殖。
- 兔子永远不会死亡。
小 R 从一对新生的小兔子开始观察。他想知道在第 A 个月末,总共会有多少对兔子。
请你帮助小 R 编写一个程序,计算在给定的月份 A 时,兔子群体的总对数。
注意:
- 初始时有 1 对新生小兔子。
- 第 1 个月末有 1 对兔子:原来那对变成了成年兔子,并开始繁殖。
- 第 2 个月末有 2 对兔子:原来那 1 对成年兔子,繁殖了 1 对新生的小兔子。
- 从第 3 个月开始,兔子群体会按照上述规律增长。
输入
一个整数 A(1 ≤ A ≤ 50),表示月份数。
返回
一个长整数,表示第 A 个月末兔子的总对数。
测试样例
样例1:
输入:
A = 1
返回:1
样例2:
输入:
A = 5
返回:8
样例3:
输入:
A = 15
返回:987
代码:
def solution(A):
if A == 1 or A == 0:
return 1
prev2 = 1 # F(A-2)
prev1 = 1 # F(A-1)
current = 0 # F(A)
for _ in range(2, A + 1):
current = prev1 + prev2
prev2 = prev1
prev1 = current
return current
if __name__ == "__main__":
# 测试用例
print(solution(1) == 1)
print(solution(5) == 8)
print(solution(15) == 987)
代码解读: 这段代码是一个Python程序,用于计算斐波那契数列中的第n项。斐波那契数列是一个著名的数列,其中每一项都是前两项的和,通常定义为:F(0) = 0, F(1) = 1, 且对于 n > 1, 有 F(n) = F(n-1) + F(n-2)。
下面是代码的详细解释:
-
函数定义:
def solution(A):定义了一个名为solution的函数,它接受一个整数参数A,表示要计算的斐波那契数列的项数。
-
基本情况:
if A == 1 or A == 0:如果A为 0 或 1,直接返回 1,因为斐波那契数列的第0项和第1项都是1。
-
初始化变量:
prev2 = 1和prev1 = 1分别初始化两个变量为斐波那契数列的前两项,即 F(A-2) 和 F(A-1)。current = 0初始化一个变量current用于存储当前计算的斐波那契数。
-
循环计算:
for _ in range(2, A + 1):循环从第2项开始,直到第A项。current = prev1 + prev2计算当前斐波那契数,即前两项的和。prev2 = prev1和prev1 = current更新前两项的值,为下一次循环做准备。
-
返回结果:
return current返回计算出的斐波那契数列的第A项。
-
主程序:
if __name__ == "__main__":这部分代码在直接运行该脚本时执行。print(solution(1) == 1)、print(solution(5) == 8)和print(solution(15) == 987)是测试用例,用于验证函数的正确性。
注意:在测试用例中,print(solution(15) == 987) 是不正确的,因为斐波那契数列的第15项实际上是 610,而不是 987。正确的测试用例应该是 print(solution(15) == 610)。