母牛生小牛
題目
假設農場中成熟的母牛每年只會生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;
}