题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第M个月的兔子总数为多少?
思路:
1.计算每对兔子的子女数(子女的子女不算),假设到第M个月,这一对兔子出生是在第N个月,则子女数为 sum = ( M - N - 1) * 2,然后递归算出每一对兔子的子女数,所有兔子的子女数相加,就是兔子总数,然而递归过程写得有点问题_(:з」∠)_暂时没调好;
2.随着月份数增加,兔子总数呈现斐波拉契数列:1,1,2,3,5,8,13,21,……,即 f(n) = f(n-1) + f(n-2) (具体参考博文:点击打开链接)
代码:
输入:月份M
输出:当前月份兔子总数
import java.util.Scanner;
public class Rabbit {
private static int sumRabbit(int Month) {
int sum = 0;
if (Month < 3) {
sum = 1;
} else {
sum = sumRabbit(Month - 1) + sumRabbit(Month - 2);
// System.out.println("Month: "+Month+" ; sum= " + sum);
return sum;
}
return sum;
}
public static void main(String[] args) {
int Month;
Scanner sin = new Scanner(System.in);
do {
Month = sin.nextInt();
System.out.println("第" + Month + "个月生出的兔子有"
+ (new Rabbit()).sumRabbit(Month) + "只");
} while (sin.hasNext());
}
}