-
- 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
-
分析:根据题目可以得出的是(以对考虑问题 不要把它换算为只)
1月:1对
2月:1对
3月:2对
4月:3对
5月:5对
6月:8对
.......
可以得出的规律是:第n月的兔子是由:
前2个月对数*2+前一个月增加的数, 那么也可以简单算法就是: 第n个月的兔子数是:前一个月和前两个月的和
法一:比较直的方法,暴力破解
public class title01 {
public static void main(String[] args) {
int sum[] = new int[12];
for(int i =1 ;i <= 12; i++){
if(i == 1 || i==2){
sum[i-1] = 1;
}else{
sum[i - 1] = sum[i-2]+sum[i-3];
}
}
for(int i = 0; i<12 ; i++){
System.out.println( i+1+ "月: " + sum[i] + " 对");
}
}
运行结果:
编辑
法二:用递归算法解决
public class title01_1 {
public static int sum(int n){
if(n >= 13){
return 0;
}
if(n == 1 || n == 2){
return 1;
}else{
return sum(n-1) + sum(n-2);
}
}
public static void main(String[] args) {
for(int i = 1; i<= 12; i++){
System.out.println(i + "月:" + sum(i) + "对");
}
}
}
运行结果:
编辑
这个题主要用到了递归算法,应该是递归中比较简单的一类问题,虽然递归解决很简单,但是,递归很消耗内存,耗时间,一般情况能不用也可以不用的。