JS中用递归的方法实现阶乘

一、什么是递归?

在函数内部自己调用自己。按照我的理解,递归的原理就是不断进行传递和回归。

二、什么是阶乘?

以3的阶乘为例,如下图:3的阶乘可以看作2的阶乘以3,2的阶乘可以看作1的阶乘以2,1的阶乘可以看作0的阶乘提供的结果。规律就是上一个阶乘的结果乘以阶乘数。

 

 由此可知,要计算n的阶乘,只需要计算上一个阶乘的结果乘以当前的阶乘数,起点为0的阶乘,就可以写出如下代码:

 现在以3的阶乘为例,解释一下代码,如下图,执行JS(3)时会生成一个执行上下文,返回一个3*JS(2),现在需要调用JS(2),在生成一个执行上下文,JS(2)目前处于暂定,返回一个2*JS(1),然后需要调用JS(1),在生成一个执行上下文,JS(1)目前处于暂定,返回一个、1*JS(0),最后需要调用JS(0),在生成一个执行上下文,JS(0)目前处于暂定,因此此时num小于等于1,因此返回结果1,处于栈顶的JS(0)不需要再往下运行,会弹出,把结果传递给下面的执行上下文,JS(1)执行结果就是1*1=1,处于栈顶的JS(1)不需要再往下运行,会弹出,把结果传递给下面的执行上下文,JS(2)执行结果就是2*1=2,处于栈顶的JS(2)不需要再往下运行,会弹出,把结果传递给下面的执行上下文,JS(3)执行结果就是3*2=6,处于栈顶的JS(3)不需要再往下运行,会弹出,不需要往下传递直接返回。

有何问题欢迎指正~~

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值