gpt4 book ai didi

javascript - 有人可以解释这个递归的 JS 代码来计算指数吗?

转载 作者:行者123 更新时间:2023-11-30 07:01:05 24 4
gpt4 key购买 nike

虽然这是一个非常简单的示例,但我无法理解这种递归。当它转到 power(base, exponent - 1); 时,它应该做什么?当不断调用 power 直到 exponent 等于 0 时,事情是如何成倍增加的?

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

最佳答案

让我们从头开始。

假设您调用 power(base, 0)。由于 exponent 为 0,函数返回 1。

现在,假设您调用 power(base, 1)。由于 exponent 这次不为 0,该函数调用 power(base, exponent - 1) 并将其乘以 base。 (这是这里的关键……它获取递归调用的结果,并添加自己的扭曲。)因为 exponent - 1 = 0,并且 power(base, 0) 为 1,结果实际上是 base * 1。阅读:base

现在开始power(base, 2)。最终是 base * power(base, 1)。而power(base, 1)就是base * power(base, 0)。最终结果:base * (base * 1)。读取:base 平方。

等等。

如果不是很明显,顺便说一下,这个函数只适用于非负整数指数。如果 exponent 是负数,或者比整数多或少一点点,该函数将“永远”运行。 (实际上,一旦递归耗尽所有堆栈,您很可能会导致堆栈溢出。)

你可以用一些代码修复负幂的函数

if (exponent < 0) return 1 / power(base, -exponent);

至于非整数...除了抛出异常之外,没有什么好的方法可以解决这个问题。将数字计算为非整数次方是有道理的,因此您不想只 chop 指数或假装他们没有尝试这样做——您最终会返回错误的答案。

关于javascript - 有人可以解释这个递归的 JS 代码来计算指数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610545/

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