[蓝蓝计算机考研算法训练二期]-day07

26 阅读1分钟

10、统计每个月兔子的总数

有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。 例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少? 数据范围:输入满足 1<=n<=31

输入描述:

输入一个int型整数表示第n个月

输出描述:

输出对应的兔子总数

1、思路

跟斐波那契数列一样,前两个月兔子数量都为1,从第三月开始兔子得数量=前两个月数量之和,递归和迭代都可以。

2、具体实现

Java实现 递归:

public static int number(int n) {
    if (n <= 2) {
        return 1;
    } else {
        return number(n - 1) + number(n - 2);
    }
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    System.out.println(number(n));
}

迭代:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int num1 = 1, num2 = 1, num = 0;
    if (n <= 2)
        num = 1;
    else {
        for (int i = 3; i <= n; i++) {
            num = num1 + num2;
            num1 = num2;
            num2 = num;
        }
    }
    System.out.println(num);
}

结果:

image.png