问题:一对刚出生的小兔子,出生后第3个月起每个月都生一对兔子,等小兔子长到第3个月后每个月又可以生一对兔子,如果兔子都长生不死,请问每个月的兔子有多少对?
分析:1~6月第兔子对数分别是:1,1,2,3,5,8,规律就是每个月的兔子对数是前两个月兔子对数的总和;既然思路有了,那么代码就不是问题了。
第一种是递归法:
/**
* 方法一,递归法
* @param month
* @return
*/
private static int rabbitRecursive(int month){
if(month <= 0)return 0;
return month <= 2 ? 1 : rabbitRecursive(month-1) + rabbitRecursive(month -2);
}
第二种,既然可以用递归解决,那么也可以用循环
/**
* 方法二,数组循环遍历法
* @param month
* @return
*/
private static int rabbitCycle(int month){
if(month <= 0) return 0;
int[] num = new int[month];
for(int i = 0; i < month; i++){
num[i] = i < 2 ? 1 : num[i-1] + num[i-2];
}
return num[month-1];
}