gpt4 book ai didi

javascript - Eloquent javascript 递归示例中的困惑

转载 作者:行者123 更新时间:2023-12-03 04:26:07 26 4
gpt4 key购买 nike

这段递归代码来自《eloquent javascript》一书

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

console.log(power(2, 3));

显然指数会减少直到达到0,如果它不为零,它会在堆栈上添加幂调用,如果它为零,我开始看到返回值1然后2然后4然后8。但是如何基数是否乘以指数,基数如何看到指数值?它在其他和电源调用上吗?

最佳答案

But how did base got multiplied by exponent

它不会乘以指数

指数被用作计数器,一旦它减少到0就结束递归循环。相反,基数与自身相乘指数次数。

每次调用 power() 返回 1base 的值都支持这一点。在后一种情况下,再次调用 power() 来获取 1 或要乘以的 base 的另一个副本。并且,此过程会重复,直到最终返回 1 作为最终乘数。

            power(2, 3) ==
2 * power(2, 2) == // base * ...
2 * 2 * power(2, 1) == // base * (base * ...)
2 * 2 * 2 * power(2, 0) == // base * (base * (base * ...))
2 * 2 * 2 * 1 // base * (base * (base * (1)))
<小时/>

同样的步骤也可以用循环来定义,不过使用 1 作为初始值而不是在末尾:

function power(base, exponent) {
var result = 1;

while (exponent) {
result *= base;
exponent--;
}

return result;
}

console.log(power(2, 3)); // 1 * base * base * base == 1 * 2 * 2 * 2 == 8

关于javascript - Eloquent javascript 递归示例中的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43709248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com