gpt4 book ai didi

javascript - Javascript 中的递归和 "Return"语句

转载 作者:行者123 更新时间:2023-11-29 16:36:36 26 4
gpt4 key购买 nike

这里是 javascript 初学者......

我遇到了一个问题,我必须使用递归来确定给定数字 (n) 是否为偶数。这是我的解决方案 - 它通过了所有测试 - 但我想知道在其中需要“返回”一词的地方 - 请参阅以下评论:

var isEven = function(n) {
if (n < 0){
n = Math.abs(n);
}

if(n === 1){
return false;
} else if (n === 0){
return true;
} else {
return isEven(n-2); // here is my question - can you explain why does this need the 'return' in there?
}
};

最佳答案

here is my question - can you explain why does this need the 'return' in there?

它与函数调用有关,以及函数的结果如何传递回调用者。

暂时忘掉递归,让我们看看一对函数。

function foo() {
return 'foo for you';
}

function bar() {
foo();
}

如果我这样调用 bar() 会发生什么:

console.log(bar());

预期输出:

'undefined'

foo() 被执行,但函数调用的结果被忽略(例如,不保存到变量,也不返回)。 bar() 没有显式返回语句,因此根据 ECMA 规范,使用隐式 return undefined;

查看调用堆栈(请注意,这是写成堆栈数据结构,当前函数调用位于堆栈顶部):

foo() ==> returns 'foo for you'
bar() ==> returns 'undefined'

这导致 undefined 被传递到控制台输出函数。

如果我们像这样修改bar():

function bar() {
return foo();
}

我们的输出变为:

'foo for you'

foo() 的结果作为 bar() 检查调用堆栈的结果返回

foo() ==> returns 'foo for you'
bar() ==> returns foo() which returns 'foo for you'

回到您的递归示例,如果没有 return 语句,它将执行,但执行结果不会向上传递到调用堆栈。

让我们假装缺少 return 语句,并在 n = 4 时检查调用堆栈。

isEven(0) ==> returns true
isEven(2) ==> returns undefined
isEven(4) ==> returns undefined

isEven(4) = 未定义。错误。

最终期望值 true 永远不会向上传递到调用堆栈。

如上所写,加上返回值,结果是这样的:

isEven(0) ==> returns true
isEven(2) ==> returns isEven(0) which returns true
isEven(4) ==> returns isEven(2) which returns isEven(0) which returns true

isEven(4) = true 通过。

关于javascript - Javascript 中的递归和 "Return"语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50732969/

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