题目:1个细胞的生命周期是 3 小时,1 小时分裂一次。求 n 小时后,容器内有多少细胞?
前提:到第三个小时,细胞先分裂在死亡
思路:
最开始细胞数: 1
1小时后细胞数:2
2小时后细胞数:4
3小时后细胞数:7,因为到了3小时,之前的细胞死亡了所以减1
所以递推公式:
f(n) = f(n-1)*2-f(n-3)
f(0) = 1
f(1) = f(0)*2
f(2) = f(1)*2
f(3) = f(2)*2-f(0)
代码:
/**
* 细胞分裂计算
* 题目:1个细胞的生命周期是 3 小时,1 小时分裂一次。求 n 小时后,容器内有多少细胞?
* 到第三个小时,细胞先分裂在死亡
*/
public class CellDivision {
public static void main(String[] args) {
int n = 6;
System.out.println(n+"个小时后,细胞分裂数为:"+cd(n));
}
/**
* 递推公式:
* f(n) = f(n-1)*-f(n-3)
* f(0) = 1
* f(1) = f(0)*2
* f(2) = f(1)*2
* f(3) = f(2)*2-f(0)=7
* @param n
* @return
*/
public static int cd(int n) {
if(n==0) {
return 1;
} else if(n==1) {
return 2;
} else if(n==2) {
return 4;
}
int x = cd(n-1)*2-cd(n-3);
System.out.println(n+"个小时后,细胞分裂数为:"+x);
return x;
}
}
输出:
3个小时后,细胞分裂数为:7
4个小时后,细胞分裂数为:12
5个小时后,细胞分裂数为:20
3个小时后,细胞分裂数为:7
6个小时后,细胞分裂数为:33
6个小时后,细胞分裂数为:33