用Java编写程序:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问n个月后兔子总数为多少?
时间: 2024-11-04 20:09:35 浏览: 0
在Java中解决这个问题可以采用动态规划或者递归的方式来计算兔子的数量。这是一个经典的“斐波那契”型的问题,也可以称为“兔子繁殖模型”。设f(n)表示n个月后的兔子总数。
1. 动态规划方法:
我们可以创建一个数组存储每个月兔子的数量,初始时母兔数为1对(包括新生的小兔子),然后逐月递增。从第3个月开始,每月的兔子数等于前两个月兔子数之和。用公式表示就是:
f(0) = 1 (第一对兔子)
f(1) = 1 (出生的小兔子)
f(n) = f(n-1) + f(n-2), 对于 n >= 2
```java
int rabbits(int n) {
int[] dp = new int[n+1];
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
```
2. 递归方法(虽然不是最优解,因为会有很多重复计算):
递归形式可以这样表达:
```java
public static int rabbitCount(int month) {
if (month == 0 || month == 1) {
return 1;
} else {
return rabbitCount(month - 1) + rabbitCount(month - 2);
}
}
```
阅读全文