gpt4 book ai didi

javascript - 递归时Return(1)的作用是什么?

转载 作者:行者123 更新时间:2023-11-30 08:00:51 24 4
gpt4 key购买 nike

所以我很难理解递归,我看不出返回 1 作为最后一步如何结束以下代码。为什么不将返回 1 作为最后一步将“1”而不是“27”分配给返回值?

我试着自己写出伪代码来解释它,但尝试让我意识到我真的不知道发生了什么。如果除了解释之外,还提供了一些伪代码,那就太棒了。谢谢。

function solveExponent(num, exp) {
if (exp === 0) {

// this causes the stack to well you know exceed the limit
// letsReturnOne();

return 1; // so i don't understand how this is any different
}

return num * solveExponent(num, exp - 1);
}

alert(solveExponent(3, 3));

function letsReturnOne() {
return 1;
}

alert(letsReturnOne());

最佳答案

当你有这样的代码时

if (exp === 0) {
letsReturnOne();
}

letsReturnOne返回的值会返回给solveExponent,但是由于这个值被忽略了,solveExponent会继续执行下面的语句它会调用 solveExponentexp-1。从那时起,exp 将永远为负,永远无法达到0。这就是为什么你的递归永远不会结束。

相反,像这样返回 letsReturnOne() 返回的值

if (exp === 0) {
return letsReturnOne();
}

由于letsReturnOne返回的值是立即返回的,solveExponent不会执行里面剩下的语句,当exp等于到 0。

函数评估输入的实际递归方式是这样的,

solveExponent(3, 3)
3 * solveExponent(3, 2)
3 * (3 * solveExponent(3, 1))
3 * (3 * (3 * solveExponent(3, 0)))

此时,exp0,所以我们返回1,这称为递归的基本情况。

3 * (3 * (3 * 1))
3 * (3 * 3)
3 * 9
27

关于javascript - 递归时Return(1)的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656474/

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