gpt4 book ai didi

C++ 递归变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:58 25 4
gpt4 key购买 nike

我想我的问题真的很简单,但我已经尝试修复它好几个小时了,但我似乎没有弄明白。我有一个 ast 树(使用 boost-library 创建)并通过递归迭代它。我将所有节点保存在 NodeDescriptions 列表中,其中包含实际节点的编号、实际节点的名称以及作为实际节点的父节点的节点。但是,我的父节点总是有错误的编号。我想我在我的变量范围上做错了什么,以错误的方式传递它,或者类似的事情。如果有人能帮助我,我会很高兴:

void convert_to_parsetree(BOOST_SPIRIT_NAMESPACE::tree_match<iterator_t>::const_tree_iterator parse_node, int calNode) {
int remNum = calNode;
std::string node_value(parse_node->value.begin(), parse_node->value.end());
//First Element: Node-Counter, Second Element, Name of Node, Third Element: Parent Node Number
myList.push_back(NodeDescription(counter++, node_value, remNum));

if (parse_node->children.size() > 0) {

if (parse_node->children.size() > 1) {
//std::string value(parse_node->children[0].value.begin(), parse_node->children[0].value.end());
//std::string value2(parse_node->children[1].value.begin(), parse_node->children[1].value.end());

BOOST_SPIRIT_NAMESPACE::tree_match<iterator_t>::const_tree_iterator children_it = parse_node->children.begin();
for (int i = 0; i < parse_node->children.size(); ++i) {
convert_to_parsetree(children_it, counter);
children_it++;
}
} else {
convert_to_parsetree(parse_node->children.begin(), counter);
}
}
}

很简单,但不知何故它不起作用。提前致谢并致以亲切的问候。

最佳答案

问题是在你的递归调用中,你传递了全局变量 counter 中的值。作为第二个参数。但是,您的递归函数使用第二个参数作为“父节点号”(因为它保存在 remNum 中),并且全局 counter递增。这意味着 for使用递归调用迭代子项的循环将传入不同的 counter每次迭代的值,即使每个递归调用都应该来自同一个“父级”。

当前的递归层次应该记住当前的counter值作为其递增之前的节点号,这个记住的值是应该传递给 for 的每次迭代的值循环。

在下面的固定版本代码中,我简化了您的函数以提高可读性。

typedef BOOST_SPIRIT_NAMESPACE::tree_match<iterator_t>::const_tree_iterator
MyTreeIterator;

void convert_to_parsetree (MyTreeIterator parse_node, int parent_number) {
int node_number = counter++;
std::string node_name(parse_node->value.begin(), parse_node->value.end());
myList.push_back(NodeDescription(node_number, node_name, parent_number));
for (MyTreeIterator children_it = parse_node->children.begin();
children_it != parse_node->children.end();
++children_it) {
convert_to_parsetree(children_it, node_number);
}
}

关于C++ 递归变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18914107/

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