递归函数 - 这里发生了什么?

时间:2018-01-12 22:26:30

标签: javascript recursion

我一直在阅读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));

4 个答案:

答案 0 :(得分:1)

这样的工作原理如果:如果我们想获得base ^ 0,那么我们就有1.这是if语句。否则,此函数将计算base * base ^ (exponent - 1)。例如,请参阅2 ^ 3 = 2 * 2 ^ 2。它会继续展开这些指数,直到我们达到零点为止 - 2 * 2 * 2 * 2 ^ 02 * 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)

向后工作可能更容易

  • 最后一个循环返回1
  • 添加到第二个循环返回2 * 1
  • 第三次循环返回2 * 2 * 1
  • 第四个循环返回2 * 2 * 2 * 1
  • 第五个循环返回2 * 2 * 2 * 2 * 1
  • 第六个循环返回2 * 2 * 2 * 2 * 2 * 1

这是一个令人困惑的原因,因为在现实生活中你永远不会使用这样的递归函数,迭代求解效率要高得多。