题目:
母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设不会死。第一年农场有一只成熟的母牛,从第二年开始,母牛开始生小母牛,求N年后,母牛的数量。
通过列举前几年的母牛数量,可以发现规律:前三年,母牛数量分别是1,2,3,从第四年开始,满足F(N) = F(N-1) + F(N-3)。其中
F(N)表示今年母牛的数量,F(N-1)表示去年母牛的数量,F(N-3)表示三年前新生母牛已经可以开始生育,即三年前出生的母牛的数量。
代码如下:
package com.gxu.dawnlab_algorithm8;
/**
* 母牛问题
* @author junbin
*
* 2019年7月12日
*/
public class Cow {
//递归求解
public static int cowNumber1(int n) {
if (n < 1) {
return 0;
}
if (n == 1 || n == 2 || n == 3) {
return n;
}
return cowNumber1(n - 1) + cowNumber1(n - 3);
}
//非递归求解
public static int cowNumber2(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 res;
}
public static void main(String[] args) {
int n = 20;
System.out.println(cowNumber1(n));
System.out.println(cowNumber2(n));
}
}
进阶问题:
如果每只母牛只能活10年,求N年后,母牛的数量。
此问题有待解决。