根据我对递归调用的理解,当你通过调用函数来递归时,语句需要是一个返回语句,因为基本上当它弹出函数堆栈时,它会从前面的调用中获得一些值。
我有一些代码,如在BST中插入
insertCorrectLocation(root, newNode) {
if (newNode.data < root.data) {
if (root.left == null) {
root.left = newNode
} else {
return this.insertCorrectLocation(root.left, newNode)
}
}
else {
if (root.right == null) {
root.right = newNode
} else {
return this.insertCorrectLocation(root.right, newNode)
}
}
}即使我删除了调用的返回语句,这也是有效的,例如
else {
if (root.right == null) {
root.right = newNode
} else {
this.insertCorrectLocation(root.right, newNode)
}
}这是怎么发生的呢?
发布于 2019-09-01 22:44:49
不需要从主要用于副作用的函数中return任何值。递归函数没有特殊的处理方法,所以它也适用于这些函数。例如:console.log主要用于effect,它返回默认值undefined。因此,在递归函数更改现有对象的示例中,在该过程完成后,该对象将能够使用根节点作为整个树。
最常见的错误是合同应该返回一个值,但您在某些地方忘记了返回。例如:
function factorial(n) {
if (n === 1) return 1;
factorial(n - 1) * n;
}
factorial(1) ; //==> 1
factorial(2) ; //==> undefined没有显式返回值的函数总是返回undefined。因此,对于阶乘,返回undefined显然是一个错误,但它确实倒回了堆栈并进行了所有计算,只是它没有使用结果。
https://stackoverflow.com/questions/57745878
复制相似问题