有人能帮我理解这个代码中发生了什么吗

can someone help me understand what is happening in this code?

本文关键字:代码 发生了 什么      更新时间:2023-09-26

在下面的代码中,我很难理解这个计算是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)

基数又和里面有基数的幂函数相乘了吗?

是的,当然,这就是这个递归实现的实际工作方式。

例如,如果你扩展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

希望从这个展开式中可以清楚地看出为什么这是一种有效的(尽管很慢)计算指数的方法。

它是2的0次方或20,始终为1。

这是一种计算指数的递归方法。尽管Math.pow效果更好。

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

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

这不是最好的方法。

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

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

如果需要,请使用Math.pow