2012-03-02 61 views
1

我在下面的代码中努力了解这个计算是return base * power(base, exponent - 1);。底座再乘以具有底座的power功能吗?有人可以帮助我理解此代码中发生了什么?

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

power(2,2); 

这是否意味着return base = 2*(2,2-1)

回答

3

基座再乘以里面有基座的幂函数吗?

是的,绝对的,这就是这个递归实现的工作原理。

如果您例如扩大power(10, 4)你:

power(10, 4) 
= 10 * power(10, 3) 
= 10 * 10 * power(10, 2) 
= 10 * 10 * 10 * power(10, 1) 
= 10 * 10 * 10 * 10 * power(10, 0) 
= 10 * 10 * 10 * 10 * 1 

应该很有希望清楚这种扩张正是为什么这是一个有效的(虽然速度慢)的方式来计算指数。

+0

这是一个完整的答案。但仅供参考,这远不止于速度慢,当需要性能时,函数调用实际上非常昂贵。除此之外,这仅适用于指数为正整数。 – 2012-03-02 15:12:24

2

这2上升到0功率或2 这始终是1。

这是计算的指数的递归方法。虽然Math.pow效果更好。

所以如果指数为零,则递归结束if (exponent === 0) return 1。如果指数不为零。然后该方法调用自己递减指数变量。

发生了奇迹return base * power(base, exponent - 1);一旦方法return 1;的值从堆栈中拉出并相乘。

这不是最好的办法。

+0

感谢您的回复,对不起,我只是想了解什么样的价值实际返回这里时,计算呢? – styler 2012-03-02 15:03:42

1

这是定制实现内置方法Math.pow的。所以,这些语句输出相同的结果:

console.log(power(2,8)); // 256 
console.log(Math.pow(2, 8)); // 256 

在您需要的,请使用Math.pow代替的情况。

相关问题