用兔子的增长来讲迭代算法

2019-07-10  本文已影响0人  大黑跟小白的日常

计算需求

题目:古典问题:有一对兔子,从出生后第3 个月起(满三个月即开始生)每个月都生一对兔子,小兔子长到第三个月时又开始每个月生一对小兔子,假如兔子都不死,问n个月之后共有多少对兔子?

具体代码如下

public static int f(int month) {
        if (month < 3) {
            return 1;
        }
        // 初始值 为 第三个月 时的 数据
        int m0 = 1, m1 = 0, m2 = 0, m3 = 1, sum = 0;
        for (int i = 4; i <= month; i++) {
            // 具体迭代规则
            m3 += m2;
            m2 = m1;
            m1 = m0;
            m0 = m3;
        }
        sum = m3 + m2 + m1 + m0;
        System.out.println("刚出生:" + m0);
        System.out.println("1个月了:" + m1);
        System.out.println("2个月了:" + m2);
        System.out.println("已经生育了:" + m3);
        return sum;
    }

还有一种算法–递归

这个月的兔子,等于上个月的兔子数加上这个月新生的兔子数;
而这个月新生兔子数,刚好又是前两个月已经存在兔子所生,所以等于前两个月的兔子数;
可以得到,f(x)=f(x-1)+f(x-2),x>2

上一篇 下一篇

猜你喜欢

热点阅读