gpt4 book ai didi

javascript - JavaScript 中的递归生成器

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

我正在尝试为按顺序遍历编写递归生成器。

class Tree {
*inOrderTraversal() {
function* helper(node) {
if (node.left !== null) {
// this line is executed, but helper is not being called
helper(node.left);
}
yield node.value;
if (node.right !== null) {
helper(node.right);
}
}

for (let i of helper(this.root)) {
yield i;
}
}
// other methods omitted
}

我这样称呼生成器:
const tree = new Tree();
tree.add(2);
tree.add(1);
tree.add(3);

for (let i of tree.inOrderTraversal()) {
console.log(i); // only prints 2
}

为什么生成器只产生 2 ?为什么它至少不产生 1之前 2 ?

我怎样才能解决这个问题?

如果有帮助,我正在使用 babel 编译代码。
babel --optional runtime test.js | node

最佳答案

问题不在于递归。你的函数确实递归地调用了自己,它只是没有在外面产生值。当您调用 helper() 时,您会得到一个迭代器作为返回值,但您希望生成该迭代器的迭代值。如果你想递归地屈服,你需要 yield * .试试这样:

  * inOrderTraversal() {
function* helper(node) {
if (node.left !== null) {
// this line is executed, but helper is not being called
yield * helper(node.left);
}
yield node.value;
if (node.right !== null) {
yield * helper(node.right);
}
}

for (let i of helper(this.root)) {
yield i;
}
}

当您使用它时,您可以替换 for循环:
yield * helper(this.root)

关于javascript - JavaScript 中的递归生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32789593/

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