母牛生小牛
题目
假设农场中成熟的母牛每年只会生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;
}