我一直在阅读Eloquent Javascript并且遇到了这个代码,结果是32.我根本不知道它是怎么来的。我试图绕过这个。所以2是基数,5是指数,2 *幂(2,5 -1)< ---- -1表示什么?谢谢你的帮助:
function power(base, exponent) {
if (exponent == 0)
return 1;
else
return base * power(base, exponent - 1);
}
console.log(power(2, 5));
答案 0 :(得分:1)
这样的工作原理如果:如果我们想获得base ^ 0
,那么我们就有1.这是if语句。否则,此函数将计算base * base ^ (exponent - 1)
。例如,请参阅2 ^ 3 = 2 * 2 ^ 2
。它会继续展开这些指数,直到我们达到零点为止 - 2 * 2 * 2 * 2 ^ 0
与2 * 2 * 2
相同,我们将2 ^ 1
定义为返回1.
答案 1 :(得分:0)
那被称为递归!发生的事情是base * power将返回基数作为指数传递的次数(原始基数已经存在时减去1)。
在这种情况下最终结果是2 * 2 * 2 * 2 * 2 * 1(因为它在指数现在为0时停止了最后一次。
如果您想了解更多信息,请阅读编程https://en.wikipedia.org/wiki/Recursion_(computer_science)
中的递归答案 2 :(得分:0)
如评论中所述,5-1
评估为4
。所以
2 * power(2,5 -1)
评估为
2 * power(2, 4)
当你考虑指数时,这应该是有意义的。如果我们使用^
作为指数运算符,则递归函数使用标识
2^5 = 2 * 2^4
这在数学上是正确的。代码评估2^4
并将结果乘以2
以获得2^5
。
答案 3 :(得分:0)
循环你可以填空,看看发生了什么,它循环6次(5到0)
向后工作可能更容易
这是一个令人困惑的原因,因为在现实生活中你永远不会使用这样的递归函数,迭代求解效率要高得多。