一、什么是递归?
在函数内部自己调用自己。按照我的理解,递归的原理就是不断进行传递和回归。
二、什么是阶乘?
以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)不需要再往下运行,会弹出,不需要往下传递直接返回。
有何问题欢迎指正~~