这是指数计算的代码:
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
?
答案 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 = 2
和n = 3
,
在n = 3 - 1 = 2
和a = 2 * 2 = 4
的第一次迭代中,您的函数再次迭代,
第二次迭代n = 2 != 0
和n = 2 - 1 = 1
第三次迭代,a = 4 * 2 = 8
,因为n = 1 - 1 = 0
然后停止。