JavaScript:试图理解递归函数计算指数值的Else语句
我想用递归计算指数。我有下面成功执行的代码JavaScript:试图理解递归函数计算指数值的Else语句,javascript,if-statement,recursion,input,exponent,Javascript,If Statement,Recursion,Input,Exponent,我想用递归计算指数。我有下面成功执行的代码 function pow(base, exponent) { if (exponent <= 1){ return base } else { return base * pow(base, exponent-1) } } // console.log(pow(3, 5)); // -> answer is 243 函数pow(基数,指数){ 如果(指数)答案是243 我试图理解else的情况。在e
function pow(base, exponent) {
if (exponent <= 1){
return base
}
else {
return base * pow(base, exponent-1)
}
}
// console.log(pow(3, 5)); // -> answer is 243
函数pow(基数,指数){
如果(指数)答案是243
我试图理解else的情况。在else语句中,当指数的输入参数为2或更高时:
return base*pow(base,exponent-1)
的pow(base,exponent-1)
部分返回什么?它是否等于基值?认为2**3==2*(2**2)
和2**2==2*(2**1)
替换给出:
2 ** 3 == 2 * 2 * (2 ** 1)
这就是递归函数正在执行的所有操作。调用时:
pow(2, 3)
这就变成了:
base * pow(2, 2)
base * pow(2, 1)
pow(2,2)
变成:
base * pow(2, 2)
base * pow(2, 1)
替换给出:
base * base * pow(2, 1)
pow(2,1)
是你的基本情况,它等于base
,所以最后你得到
pow(2, 3) === base * base * base
理解递归的最佳工具之一是调试过的。只需一步一步地查看值是如何变化的以及堆栈上有什么内容。在每次递归中,调用函数时比最初传递的指数少1
pow(base, exponent-1)
本质上是从它的初始值倒计时到1,在这一点上,它满足停止递归的条件,并且只返回基
if (exponent <= 1){
return base
}
<指数>(指数< p>这是递归函数。考虑数学中的递归函数f(n)。 F(n,m)=n*F(n,m-1), F(n,1)=n。 所以,代码只是实现了这个函数
代码中的F(n)是pow(base,exponent),其中n是base,m是exponent。因此,如果你想计算'pow(2,3)--也就是2提升到3次方,或者8--这个函数可以
(if)
since 1 <= 1 ------+
(else) |
since 2 > 1 ------+ |
| |
(else) | |
since 3 > 1 ------, | |
V V V
pow(2, 3) ---> 2 * pow(2, 2) ---> 2 * 2 * pow(2, 1) ---> 2 * 2 * 2 -> 8
(如果有)
自11-----+|
| |
(否则)||
因为3>1------,||
V V V
战力(2,3)-->2*pow(2,2)-->2*2*pow(2,1)-->2*2*2->8
这就是递归的本质:从同一个函数内部调用一个函数(或者至少在调用堆栈中的某个地方;请参见相互递归示例),使用某种程度上更简单的数据;因此,最终您可以在不进行此类调用的情况下计算基本情况。使用参数、基数和指数-1调用
pow
函数,并返回结果乘以basefyi,pow(x,0)
返回x
,但应始终返回1
-如果(指数===0)返回1,您可以通过将基本大小写调整为来解决此问题