来自此代码的else块的逻辑是什么?

时间:2012-10-13 22:14:02

标签: javascript

我很难理解else块。我知道它应该将base参数提升为exponent参数。但它是如何运作的?

var power = function(base, exponent){

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

};

power(2, 2);

2 个答案:

答案 0 :(得分:1)

输入power(2/*base*/,2/*exponent*/)

ITERATION 1:由于2/*exponent*/不等于0:在条目上,它会执行else部分。

因此它应该返回2 * power(2,(2-1)/*which is 1*/)

ITERATION 2 :再次,调用power()函数并使用参数2/*base*/ and 1/*exponent*/ power(2,1)已在else部分执行:returns 2 * power(2,0)

ITERATION 3 :再次调用带有参数power()的{​​{1}}函数

  

由于指数为0,它执行if部分并返回1,即   完成第二次迭代,返回2。完成了   第一次迭代从它返回4。

答案 1 :(得分:1)

power(base, exponent - 1)

实际上只是base * power(base, exponent - 1)。但是,如果我们继续思考这些函数调用中发生的事情,我们会看到:

base * ... pow(base, exponent - n)

让我们试试power(2, 4)

2 * (2 * (2 * (2 * (1))))

2 * power(2, 4 - 1);

power(2, 4 - 1)简化为

2 * power(2, 3 - 1)

简化为

2 * power(2, 2 - 1)

简化为

2 * power(2, 1 - 1)

这简化为1,因为exponent将为0。当我们把它们放在一起时,这就是我们得到的:

2 * 2 * 2 * 2 * 1