问题是这样的:一对小兔子一年后长成大兔子;一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。假定第一年年初投放了一对小兔子,试编程计算第n年末总共会有多少对兔子(不考虑非自然死亡)。n由键盘输入。
因为兔子包含死亡以及绝育问题,这时候我们需要在原有的基础上把死亡的兔子及时去除,绝育的兔子需要在绝育时及时的在健康的兔子中去除。
- 年份 1----2----3----4----5----6----7…
- 幼年 1----0----2----2----6----8----20…
- 成年 0----1----1----3----4----10—16…
- 老年 0----0----0----0----1----1----2…
- 死后 0----0----0----0----0----0----1…
因为是大兔子4年的繁殖期,所以截至到兔子繁殖是需要5年的时间。因此我们的递归就有了思路。
没有死亡的情况:
Fib(n) = Fib(n - 1) + 2 * Fib(n - 2);
加上绝育的情况:
Fib(n) = Fib(n - 1) + 2 * (Fib(n - 2) - Fib(n - 5));
再加上死亡的情况:
Fib(n) = Fib(n - 1) + 2 * (Fib(n - 2) - Fib(n - 5)) - Fib(n - 6);
以下是落实代码↓
import java.util.Scanner;
public class RabbitBreed{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print("请输入要求的年份:");
int year = input.nextInt();
System.out.println("兔子的数量为:" + Fib(year));
}
public static int Fib(int n){
if(n > 2){
if(n > 5){
if(n > 6){
return Fib(n - 1) + 2 * (Fib(n - 2) - Fib(n - 5)) - Fib(n - 6);
}
return Fib(n - 1) + 2 * (Fib(n - 2) - Fib(n - 5));
}
return Fib(n - 1) + 2 * Fib(n - 2);
}
return 1;
}
}