问题:

一个细胞,一小时分裂一次,声明周期是三小时,求n小时后有多少细胞?

分析:

细胞消亡: 白色 -> 绿色 -> 黄色 -> 黑色
白色:新细胞,分裂一次后产生一个白色细胞,自己则变成绿色
绿色细胞再次分裂出一个白色细胞,自己则变成黄色
黄色细胞再次分裂出一个白色细胞,自己则变成黑色,黑色即声明周期结束
存活的细胞 = 白色 + 绿色 + 黄色
image.png
image.png

代码

  1. // 细胞分裂算法
  2. /*
  3. 一个细胞,一小时分裂一次,声明周期是三小时,求n小时后有多少细胞?
  4. 细胞消亡: 白色 -> 绿色 -> 黄色 -> 黑色
  5. 白色:新细胞,分裂一次后产生一个白色细胞,自己则变成绿色
  6. 绿色细胞再次分裂出一个白色细胞,自己则变成黄色
  7. 黄色细胞再次分裂出一个白色细胞,自己则变成黑色,黑色即声明周期结束
  8. 存活的细胞 = 白色 + 绿色 + 黄色
  9. */
  10. function total(n) {
  11. var yellow = function (n) {
  12. // 设置出口, 边界条件
  13. if (n === 0 || n === 1) return 0
  14. return green(n - 1)
  15. }
  16. var green = function (n) {
  17. // 设置出口, 边界条件
  18. if (n === 0) return 0
  19. return white(n - 1)
  20. }
  21. var white = function (n) {
  22. // 设置出口, 边界条件
  23. if (n === 0) return 1
  24. return white(n - 1) + green(n - 1) + yellow(n - 1)
  25. }
  26. return yellow(n) + green(n) + white(n)
  27. }
  28. console.log(total(0));
  29. console.log(total(1));
  30. console.log(total(2));
  31. console.log(total(3));
  32. console.log(total(4));
  33. console.log(total(5));
  34. /*
  35. 1
  36. 2
  37. 4
  38. 7
  39. 13
  40. 24
  41. 123
  42. */