这道题的思路有多种,可以使用递归,也可以使用动态规划,在这里我们使用动态规划的思路为大家分析这道题:
我们分析题意不难知道:每只兔子自出生的前两个月是不会生下新的兔子的,从第三个月开始每个月都会生下一只兔子。这是这道题解题的核心。
第一个月兔子的数量为一只(记为A),第二个月兔子的数量为一只,第三个月这只兔子产下了一只兔子(记为B),此时具有两只兔子(A、B),第四个月时,为B出生的第一个月,故B不产子,A仍产子,此时产子记为C,共有三只兔子(A、B、C),第五个月时,B已经出生够两月,故此时B也开始产子,记为D,A仍产子记为E,此时共有五只兔子(A、B、C、D、E).......以此类推,不难发现,每个月的兔子数量为前两月兔子数量的总和。类似于斐波那契数列。
JAVA代码如下:
public class Main4 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int ret = judge(num);
System.out.println("ret=" + ret);
}
private static int judge(int num) {
int[] arr = new int[num];
arr[0] = 1;
arr[1] = 1;
int i = 2;
while (i < num) {
arr[i] = arr[i - 1] + arr[i - 2];
i++;
}
return arr[arr.length - 1];
}
}