我很难理解else块。我知道它应该将base参数提升为exponent参数。但它是如何运作的?
var power = function(base, exponent){
if (exponent === 0){
return 1;
}
else{
return base * power(base, exponent - 1);
}
};
power(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