指数代码,我对代码行为没有任何了解

时间:2019-02-11 11:56:36

标签: javascript

这是指数计算的代码:

var exponent = function(a, n){
  if(n === 0) {
    return 1;
  }
  else {
    return a * exponent(a, n-1)
  }
};

console.log(exponent(5,3));

我不明白这一行:

return a * exponent(a, n-1)

exponent(a, n-1)是什么意思?尤其是n-1

5 个答案:

答案 0 :(得分:2)

在您的示例中

exponent(5, 3)

在该行上,它等于

5 * exponent(5, 2) // 2 = 3 - 1

然后等于

5 * (5 * exponent(5, 1)) // 1 = 2 - 1

= 5 * (5 * (5 * exponent(5, 0))) // 0 = 1 - 1

= 5 * (5 * (5 * 1)) // exponent(5, 0) = 1 because n === 0

...

答案 1 :(得分:1)

您的函数正在使用recursion,因此它在函数中进行了调用。

让您的函数exponent成为exp进行解释。

比方说,您想计算5^3(三分之五)。这与写作
exp(5, 3)

exp(5, 3)将返回5 * exp(5, 2)

但是,我们还不知道exp(5, 2)是什么,因此我们需要解决这个问题(再次使用函数)

exp(5, 2)将返回5 * exp(5, 1)

同样,我们还不知道exp(5, 1)是什么,所以我们还需要弄清楚这一点。

exp(5, 1)将返回5 * exp(5, 0)

再一次,我们仍然不知道exp(5, 0)是什么,因此我们需要让我们的函数来计算它。但是,这样做会影响我们的基本情况,因为x ^ 0总是会给您1基本情况是允许递归调用完成的原因(因为不使用对函数的其他调用)。因此:

exp(5, 0)将返回1

现在我们知道所有函数的功能了,我们可以遍历函数调用:

exp(5, 1)返回了5 * exp(5, 0),即5 * 1等于5

exp(5, 2)返回了5 * exp(5, 1),即5 * 5等于25

exp(5, 3)返回了5 * exp(5, 2),即5 * 25等于125

因此,您终于得到了以下结果:

exp(5, 3) = 125

因此,n-1的作用有点像计数器,使您越来越接近基本情况(即:if(n == 0))并管理多少次递归调用函数。

答案 2 :(得分:0)

这是一个递归函数。递归调用通过以n-1作为参数调用自身而从n递减到1。所以你得到这个:

exponent(5, 0) == 1
exponent(5, 1) == 5 * exponent(5, 1 - 1) == 5 * exponent(5, 0) == 5 * 1 == 5
exponent(5, 2) == 5 * exponent(5, 2 - 1) == 5 * exponent(5, 1) == 5 * 5 * exponent(5, 1 - 1) == 5 * 5 * exponent(5, 0) == 5 * 5 * 1 == 25
// ... and so on

因此n - 1本质上是一个计数器,用于计算该函数仍必须重复自身的次数。

答案 3 :(得分:-1)

这是一个递归函数,用于计算提高到幂a的{​​{1}}。如果指数为n,则操作完成,并返回0。否则,将1的结果提高到幂a的次数返回-这是递归的...

答案 4 :(得分:-1)

您的函数是递归函数,假设a = 2n = 3, 在n = 3 - 1 = 2a = 2 * 2 = 4的第一次迭代中,您的函数再次迭代, 第二次迭代n = 2 != 0n = 2 - 1 = 1 第三次迭代,a = 4 * 2 = 8,因为n = 1 - 1 = 0然后停止。