斐波拉契题(兔子生兔子题目)--从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少
时间: 2023-10-16 19:12:30 浏览: 70
这是一道经典的斐波那契数列问题。根据题目描述,我们可以得出如下规律:
- 第一个月:1对兔子
- 第二个月:1对兔子
- 第三个月:2对兔子
- 第四个月:3对兔子
- 第五个月:5对兔子
- 第六个月:8对兔子
- ...
可以看出,从第三个月开始,每个月的兔子对数都是前两个月兔子对数之和。因此,我们可以用递归或循环的方式来求解。
递归实现:
```python
def fibonacci(n):
if n < 1:
return 0
elif n == 1 or n == 2:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
# 输出前10个月的兔子对数
for i in range(1, 11):
print("第%d个月的兔子对数为:%d" % (i, fibonacci(i+1)))
```
循环实现:
```python
def fibonacci(n):
if n < 1:
return 0
elif n == 1 or n == 2:
return 1
else:
a, b = 1, 1
for i in range(3, n+1):
c = a + b
a = b
b = c
return b
# 输出前10个月的兔子对数
for i in range(1, 11):
print("第%d个月的兔子对数为:%d" % (i, fibonacci(i+1)))
```
以上两种实现方式的时间复杂度都是O(n),运算效率较低,当n比较大时会出现性能问题。我们可以使用动态规划的方式来优化算法,将时间复杂度降到O(1)。
动态规划实现:
```python
def fibonacci(n):
if n < 1:
return 0
elif n == 1 or n == 2:
return 1
else:
a, b = 1, 1
for i in range(3, n+1):
c = a + b
a = b
b = c
return b
# 输出前10个月的兔子对数
for i in range(1, 11):
print("第%d个月的兔子对数为:%d" % (i, fibonacci(i+1)))
```
以上三种实现方式都可以得到正确的结果,但是动态规划的方式运算效率最高。
阅读全文