JS递归小结

本文通过三个示例探讨递归算法在解决数学问题中的应用,包括计算阶乘、猴子吃桃问题和自由落体反弹问题。每个问题都通过递归函数进行解析,并展示了如何通过递归找到问题的解决方案。此外,还涉及细胞分裂问题,分析了细胞在不同阶段的数量关系,进一步阐述了递归思想在解决复杂问题时的重要性。
摘要由CSDN通过智能技术生成

//练习计算任意数的阶乘

/*

function jc(n){

    //当n为1的时候,之间返回1,不再往后执行,结束了递归

    if(n===1){

        return 1

    }

    //n的阶乘,由n*n-1的阶乘组成

    return n*jc(n-1)

    

}

jc(4)

console.log(jc(4))

*/

//猴子吃桃问题:猴子第一天摘下若干个桃子,

//当即吃了一半,还不瘾,又多吃了一个  

// 第二天早上又将剩下的桃子吃掉一半,

//又多吃了一个。

//以后每天早上都吃了前一天剩下的一半零一个。

//到第10天早上想再吃时,见只剩下一个桃子了。

//求第一天共摘了多少。

/*

//创建函数f(n)表示第n天的桃子数量

function f(n){

    //思路:第二步

    //设置n为边界,为第n天最后的桃子数量

    //题目是第10天还剩一个

    if(n==10){

        return 1

    }

    //思路:第一步

    //寻找f(n)和f(n-1)的关系

    //经分析得出 f(n)=2*(f(n+1)+1)

    return 2*(f(n+1)+1)

}

console.log(f(1))

*/

//一球从100米高度自由落下,

//每次落地后反跳回原高度的一半;再落下

//求它在第10次落地时,共经过多少米?

//第10次反弹多高?

/*

//h(s)为第s次反弹多高

function h(s){

    //(2)寻找边界

    if(s==0){

        return 100

    }

    //(1)h(s)=h(s-1)/2

    return h(s-1)/2

}

console.log(h(10))

*/

//细胞分裂,一个细胞一小时分裂一次,生命周期是3小时

//求n小时,有多少细胞

//分析细胞每个小时都分裂,并且分三个阶段(生命周期3小时)

//一个细胞分裂后,一个第一阶段,自己进入下一阶段

//第四小时会死亡

//第n小时会有 三个阶段的细胞

//寻找关系:本小时第三阶段的细胞等于上一小时第二阶段的细胞

//      第二阶段的细胞等于第一阶段的细胞,第一阶段的细胞

//      可以由上个阶段三个阶段的细胞产生

//递归,从尾向上推

//sum(n)为第n小时的总细胞

//f3(n)第三阶段的细胞

//f2(n)第二阶段的细胞

//f1(n)第一阶段的细胞

function f3(n){

    if(n<2){

        return 0

    }

    return f2(n-1)

}

function f2(n){

    if(n<1){

        return 0    

    }

    return f1(n-1)

}

function f1(n){

    if(n<1){

        return 1

    }

    return f1(n-1)+f2(n-1)+f3(n-1)

}

function sum(n){

    return f1(n)+f2(n)+f3(n)

}

var total = sum(2)

console.log(total)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Penicillin_well

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值