Javascript验证指数方程的函数

时间:2012-04-08 04:06:25

标签: javascript recursion

这是一项新任务。我想要的答案/输出是正确的。我只是不明白为什么。如果电源功能与我检查的数字相匹配,我希望输出为真。我确实得到了这些例子的答案,但我不明白这个递归函数是如何工作的。

在这个函数的else中,我说base *函数本身。甚至代表什么? base * power(base, exponent - 1);如何计算?它不应该只是围成一圈然后最终结束?

console.log(power(2,4) === 16);
console.log(power(2,3) === 8);
console.log(power(2,2) === 4);

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

4 个答案:

答案 0 :(得分:5)

函数power返回一个整数,所以当函数返回base * <some_integer>时,表达式是完全有效的。追踪这些东西的最好方法是使用笔和纸:

调用电源堆栈(2,4):

power(2, 4) = 2 * power(2, 3)
power(2, 3) = 2 * power(2, 2)
power(2, 2) = 2 * power(2, 1)
power(2, 1) = 2 * power(2, 0)
power(2, 0) = 1 <--base case

现在你所要做的就是用调用堆栈中的值替换

power(2, 4) = 2 * 8 = 16
power(2, 3) = 2 * 4 = 8
power(2, 2) = 2 * 2 = 4
power(2, 1) = 2 * 1 = 2

答案 1 :(得分:0)

使用Javascript的语法糖声明样式编写函数可能会有所帮助:

console.log(power(2,4) === 16);
console.log(power(2,3) === 8);
console.log(power(2,2) === 4);

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

如果需要,您还可以添加

console.log("power("+base+", "+exponent+")");

在函数的头部,观察递归调用序列。

答案 2 :(得分:0)

每次递归调用都会减少指数,直到它等于0,它将返回一个常量1,函数将停止递归。

jsFiddle

另外,如果这不是作业,则有Math.pow():)

答案 3 :(得分:0)

对于权力(2,4)的例子,我们有

  • 4!= 0所以否则执行并执行2 * power(2,3)。
  • 3!= 0所以否则执行并执行2 * power(2,2)。
  • 2!= 0所以否则执行并执行2 * power(2,1)。
  • 1!= 0所以执行其他操作并执行2 * power(2,0)。
  • 最后0 == 0所以它返回1并且它不会执行另一个递归调用。

所以它通过调用返回到2 * power(2,0),我们知道power(2,0)== 1.返回2。     然后它回到2 *功率(2,1),我们知道功率(2,1)== 2,因为[2 *功率(2,0)]。这将返回4.


看模式?等等,直到我们回到2 *功率(2,3)== 16,因为我们有功率(2,3)== 8因为[功率(2,2)*功率(2,1)*功率(2) ,0)* 1]。希望这有帮助!