母牛生小牛

母牛生小牛

题目
假设农场中成熟的母牛每年只会生1头小母牛,并且永远不会死。第一年农场只有一只成熟的母牛,从第二年开始,母牛开始生小母牛。每只小母牛3年成熟后又可以生小母牛。给定整数N,求出N年后牛的数量。

【解答】
所有的牛都不会死,所以第N-1年的牛会毫无损失的活到第N年。同时所有成熟的牛都会生1头小牛,那么成熟的牛数量如何估计?就是第N-3年的所有牛,到第N年肯定是成熟的牛,期间出生的牛肯定没有成熟。所以C(n) = C(n-1)+C(n-3),初始项C(1)==1,C(2)==2,C(3)==3。这个和斐波那契数列数列十分相似,只不过C(n)依赖C(n-1)和C(n-3)的值

方法一 O(2N)

public int c1(int n) {
        if (n < 1)
            return 0;
        if (n == 1 || n == 2 || n == 3)
            return n;
        return c1(n - 1) + c1(n - 3);
    }

方法 O(N)

public int c2(int n) {
        if (n < 1)
            return 0;
        if (n == 1 || n == 2 || n == 3)
            return n;
        int res = 3;
        int pre = 2;
        int prepre = 1;
        int tmp1 = 0;
        int tmp2=0;
        for (int i = 4; i <=n; i++) {
            tmp1 = res;
            tmp2 = pre;
            res = res + prepre;
            pre = tmp1;
            prepre = tmp2;
            
        }
        return 0;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值