有人可以帮我理解这段代码中发生的事情吗?

时间:2012-03-02 14:59:42

标签: javascript

我在以下代码中努力理解这个计算是return base * power(base, exponent - 1);。 base是否会再次与其中包含基数的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 个答案:

答案 0 :(得分:3)

  

base是否会再次与其中包含基数的幂函数相乘?

是的,绝对的,这就是这种递归实现的实际效果。

例如,如果您展开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

有希望从这个扩展中明确为什么这是计算指数的有效(虽然很慢)方法。

答案 1 :(得分:2)

2为0或2 0 ,总是为1。

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

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

一旦方法return base * power(base, exponent - 1);将值从堆栈中拉出并相互相乘,神奇就会发生return 1;

这不是最好的方法。

答案 2 :(得分:1)

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

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

如果您需要,请改用Math.pow