美文网首页
递归-细胞分裂问题

递归-细胞分裂问题

作者: QaoKi | 来源:发表于2020-04-16 19:30 被阅读0次

题目:

        1 个细胞的生命周期是 3 小时,1 小时分裂一次。求 n 小时后,容器内有多少细胞?

思路:

        很明显要用递归,首先要写出 n 小时以后,细胞的数量 递归公式 f(n)

        细胞的生命周期是3个小时,也就是分裂3次以后死亡

        f(n) 和 f(n-1) 的关系为,f(n) = 2*f(n-1) - 死亡的细胞数

        f(0), 1 个

        f(1), 2 个

        f(2), 4个

        f(3), 8个,但是f(0)的细胞生命周期结束,所以f(3)应该是 7 个细胞

        f(4), 14个,此时f(1)的细胞生命周期结束,直观上我们会直接减去 f(1),剩下 12 个,得到公式 f(n) = 2*f(n-1) - f(n-3),但这是错误的,因为f(1)两个细胞中的一个,在f(3)的时候已经死了,所以应该减去 1 个,剩下 13 个

        f(5), 26个,同理,此时f(2)的细胞生命周期结束,但是f(2)的4个中2个已经死了,所以不应该减4,应该减2,剩下24个

        从上面的分析来看死亡的细胞数计算,死掉的细胞数并不是前3小时的细胞总数f(n-3),因为这里面包含n-3时刻新生的细胞和老细胞,很显然老细胞在n时刻之前就已经死完了。此时死掉的细胞数应该是n-3时刻新生的细胞数,而n-3时刻新生的细胞数正是前一时刻总的细胞数,即f(n-4),因此正确的计算公式是f(n)=f(n-1)x2 - f(n-4)

代码: go 版本

func recursion(n int) int {

    if n == 0 {

        return 1

    }

    if n == 1 {

        return 2

    }

    if n == 2 {

        return 4

    }

    if n == 3 {

        return 7

    }

    return recursion(n-1)*2 - recursion(n-4)

}

func main() {

    n := 5

    count := recursion(n)

    fmt.Println(count)

}

相关文章

  • 递归-细胞分裂问题

    题目: 1 个细胞的生命周期是 3 小时,1 小时分裂一次。求 n 小时后,容器内有多少细胞? 思路: 很明显要...

  • LeetCode-N Queens

    N皇后问题。经典回溯问题: 以下是递归及非递归的方法:

  • 递归问题

    递归是让我糊涂的问题之一,快变成我的疑难杂症了。 下面我用一到面试题来刺激我吧,以后看到的时候就想优化了 /* *...

  • 递归问题

  • 递归问题

    买汽水 转载地址[https://blog.csdn.net/qq_34399639/article/detail...

  • 第二章 递归和回溯

    递归 递归的含义:任何调用自身的函数称为递归。用递归求解问题要点在于递归函数调用自身取解决一个规模比原始问题小一些...

  • 求斐波那契数列第n个数的值

    1,1,2,3,5,8,13。。。规律就是后面的一个数等于前面两个数的和。 递归是相当耗费资源的,就像细胞分裂一样...

  • 递归2--表达式求值

    用递归解决递归形式的问题: 表达式的定义是递归的:

  • 前端开发 -- 算法模式(递归和动态规划)

    递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题,递归通常涉及到函数的自身调用。递归函...

  • 动态规划&贪心算法

    动态规划问题,问题可以分为子问题的最优解,从而递归下去。也可以自下而上的循环来解决,就是找到递归的终点,从递归的终...

网友评论

      本文标题:递归-细胞分裂问题

      本文链接:https://www.haomeiwen.com/subject/dabdvhtx.html