JSMS11-细胞一小时分裂一次,生命周期3小时,n小时后容器内有多少细胞

663 阅读1分钟

一个细胞一小时分裂一次,生命周期为3小时,求n小时之后容器内有多少细胞

这道题实际上可以用循环,但是要求用递归,用递归而且这个递归挺变态的,三递归,一环扣一环

digui.PNG

细胞分裂就是一个完美二叉树,1分2,2分4,4分8,但是有一个前提,细胞只有三个小时的声明周期,所以分裂到3小时的时候也就是黑色这个节点实际上是死亡了的。

白色的代表是新鲜细胞,绿色由白色分裂出来的,黄色由绿色变的,由此可以得到以下代码

    function total(n){
        let yellow=function(n){
            if(n===0||n===1){
                return 0;
            }
            return green(n-1)
        }
        let green=function(n){
            if(n===0){
                return 0;
            }
            return white(n-1)
        }
        let white=function(n){
            if(n===0){
                return 1;
            }
            return white(n-1)+green(n-1)+yellow(n-1)
        }
        return yellow(n)+green(n)+white(n);
    }
    /*
        分析:	3带进去 2 2 2
                   2 带进去1 1 1
                   1带进去	白色ret 1+1+2绿色ret2	黄色ret 1
    */