递归求解细胞分裂问题
来源:互联网 发布:金星网络商学院 编辑:程序博客网 时间:2024/05/21 15:03
题目:初始情况下有一个细胞,每两分钟分裂出一个细胞。两个细胞中,原细胞可按照两分钟规律继续分裂,而分裂出的新细胞有一分钟成熟期。成熟后开始每两分钟分裂出新细胞,以此循环。设计程序计算15分钟后的细胞数量。
一些想法:
递归类似于数学归纳法,先设出能解决问题的F(n),然后找F(n)与F(n-1)的关系。
本题难点就在于:由于多出了一个成熟时段,且成熟时间和分裂时间不用,所以细胞状态很多。
看了两个函数间接递归
fa(){fb(){
call fb(); call fa();
} }
突然想到可以根据细胞状态设函数。
我将细胞状态分成三类,设为a,b,c。a为不成熟态,b为半成熟态,c为成熟态。
不成熟态为刚分裂出来,需要一分钟后进入可分裂的半成熟态。半成熟态经过一分钟成为马上要分裂的成熟态。成熟态一分钟后分裂成1个半成熟态和1个成熟态。即为a->b->c->a,b
设t为时间,所以得出关系式:
a(t)=c(t-1)
b(t)=c(t-1)+a(t-1)//因为b细胞有两个来源
c(t)=b(t-1)
代码如下:
#include <stdio.h>#include <stdlib.h>int aa(int t){ if (t == 0) return 1; else return cc(t-1);}int bb(int t){ if (t == 0) return 0; else return aa(t-1) + cc(t-1);}int cc(int t){ if (t == 0) return 0; else return bb(t-1);}int main(){ int t; while(1) { scanf("%d",&t); printf("%d\n", aa(t+1) + bb(t+1)+cc(t+1)); } return 0;}
0 0
- 递归求解细胞分裂问题
- 递归求解汉诺塔问题
- 递归求解迷宫问题
- 迷宫问题递归求解
- 递归函数求解问题
- 约瑟夫问题递归求解
- Hanoi问题递归求解
- 汉诺塔问题递归求解
- 递归问题求解学习一
- 递归求解8皇后问题
- 递归法求解迷宫问题
- 迷宫问题的递归求解
- 汉诺塔问题的递归求解
- 八皇后递归求解问题
- 递归求解八皇后问题
- 递归求解全排列问题
- 八皇后问题 递归求解
- 递归求解八皇后问题
- c语言16进制输出
- 如何让div中的table居中
- html文件查看器2
- Lua封装将数字转换成万显示
- layer.js
- 递归求解细胞分裂问题
- 独立日记 2015年12月29日 day8 第一周总结
- Objective-c:集合类型遍历方法详解
- Bean Validation 介绍及最佳实践
- 如何在Swift中使用SELECTOR
- Linux Mint(系统更新)
- Linux技术——常用 linux 命令
- CSS之Flexbox布局
- 查看MYSQL数据库中所有用户及拥有权限