带有for循环的递归函数:返回值问题
recursive function with for loop: return value issue
我试图编写的这个递归xml遍历函数确实正确地访问了每个节点/元素/标记,并且在测试过程中传递了基本的case if语句。它所不做的是在函数完成展开后维护正确的返回节点。由于某种原因,当主程序移到下一行时,我的结果总是为NULL。我是递归的新手,所以希望这是一个简单的错误。。
TiXmlNode* findNode(TiXmlNode* startNode, const char* searchWord){
if (strcmp(startNode->Value(), searchWord) == 0){// base case
return startNode;
}
else
{
for (TiXmlNode* node = startNode->FirstChild(); node; node = node->NextSibling())
{
findNode(node, searchWord);
}
}
}
想想最深的findNode
调用何时返回startNode
。它去哪儿了?它是从这里来的:
findNode(node, searchWord);
你对这个结果做了什么?没有什么你忽略了它。你需要将它一直向下return
。
或者从另一个角度考虑。对findNode
的第一次调用,如果不进入第一个if
块,就永远不会到达return
语句。它从来没有机会return
你想要的。
我是这样写的:
TiXmlNode* findNode(TiXmlNode* startNode, const char* searchWord){
if (strcmp(startNode->Value(), searchWord) == 0){// base case
return startNode;
}
for (TiXmlNode* node = startNode->FirstChild(); node; node = node->NextSibling())
{
TiXmlNode* foundNode = findNode(node, searchWord);
if (foundNode != NULL) {
return foundNode;
}
}
return nullptr;
}
相关文章:
- 从python中调用C++函数并获取返回值
- 为什么模板类中的对象不能返回值
- 返回值优化:显式移动还是隐式
- lock_guard是否保护返回值
- 调用CreateProcess()并获取字符串的返回值
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 反转具有返回值的字符串时出现问题
- C++. 面试. 关于返回 int* 值问题的范围
- C 数学问题,如果数学全部在同一行上,则双重返回值
- 关于如何在函数执行后使用和获取返回值的问题
- 处理函数和返回值问题的特殊学校代码
- 如果我不关心返回值,我是否会遇到性能问题
- 无符号字符返回值和+=出现问题
- 返回值优化问题
- 带有for循环的递归函数:返回值问题
- 返回值复制问题(以改进调试时间)-- 这里的解决方案是什么?
- 多次调用同一函数返回值的问题
- 用户定义函数的返回值有问题
- 操作符返回值问题