古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
public class Ari {
/**
* 古典问题:有一对兔子
* 从出生后第3个月起每个月都生一对兔子
* 小兔子长到第四个月后每个月又生一对兔子
* 假如兔子都不死
* 问每个月的兔子总数为多少?
*分析:
* 兔子对数 当月新生兔子对数
* 1
* 1
* 2 1
* 3 1
* 5 2
* 8 3
* 13 5
* 21 8
*/
public static void main(String[] args) {
System.out.println(getRabbitNumByMonth(9));
System.out.println(getRabbitNumByMonth2(9));
}
/**
* 方法一:直接
*/
public static int getRabbitNumByMonth(int m) {
int x = 1;// 初始兔子对数
int y = 1;// 每月新生兔子对数
int z = 0;// 前一月的兔子对数
for (int i = 3; i <= m; i++) {
x += y;
int temp = y;
y += z;
z = temp;
}
return x * 2;
}
/**
* 方法二:递归
*/
public static int getRabbitNumByMonth2(int m) {
if (m == 1 || m == 2)
return 1;
else
return getRabbitNumByMonth2(m-1)+getRabbitNumByMonth2(m-2);
}
}