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,您可以通过将基本大小写调整为
来解决此问题