【发布时间】:2019-06-14 04:58:38
【问题描述】:
我对递归问题中的 return 关键字感到很困惑。例如,下面的代码是关于检查一个节点是否在二叉搜索树中。在 contains 方法中,我可以知道为什么我们需要
中的“return”return this.right.contains(data)
和
return this.left.contains(data)
? 我认为没有这个回报,只要我们打电话
this.right.contains(data)
如果没有 return 关键字,它会根据节点数据返回“null”或这个节点。为什么我们需要再把 return 放在外面?
if (this.data === data) {
return this;
}
和
return null;
我认为我们已经将结果返回到外部层。此外,当我们在 javascript 中使用回调函数时,我们没有使用 return。我很混乱。非常感谢!
class Node {
constructor(data) {
this.data = data;
this.left = null;
this.right = null;
}
insert(data) {
if (data < this.data && this.left) {
this.left.insert(data);
} else if (data < this.data) {
this.left = new Node(data);
} else if (data > this.data && this.right) {
this.right.insert(data)
} else if (data > this.data) {
this.right = new Node(data);
}
}
contains(data) {
if (this.data === data) {
return this;
}
if (this.data < data && this.right) {
return this.right.contains(data)
} else if (this.data > data && this.left) {
return this.left.contains(data)
}
return null;
}
}
【问题讨论】:
-
在 JavaScript 中,没有
return的函数总是返回undefined。你需要return,因为这就是语言的工作原理。 -
是的。如果你习惯了像 Ruby 这样隐含
return的语言,那么 Javascript 就不是这样工作的。 -
非常感谢!但是我很困惑,每当我们调用 this.right.contains(data) 时,它已经返回“this”或“null”,或者再次调用自身,所以它已经包含返回,为什么我们在调用它之前放置另一个返回?
-
@Ying 当函数调用自身时,它是一个正常的函数调用,就像其他任何函数一样。它不只是“再次跳到顶部”或其他东西,因此它可以稍后直接返回给调用者。不,当你
return结果时,你只返回到递归调用的位置,代码继续在那里运行。
标签: javascript algorithm recursion data-structures return