c++ 这个递归函数在非二叉树中搜索单词匹配有什么问题?[关闭]

fjaof16o  于 2023-04-01  发布在  其他
关注(0)|答案(2)|浏览(97)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我的项目中有这样一段代码,它必须在使用RapidXML解析的XML树中搜索精确匹配。它确实找到了匹配项,但在结尾处总是空指针匹配项。我不知道应该按照什么顺序编写函数,有人能帮我吗?

xml_node<>* processNode(xml_node<>* node, char* lookout)
    {
        for (xml_node<>* child = node->first_node(); child; child = child->next_sibling())
        {
            cout << "processNode: child name is " << child->name() << " comparing it with " << lookout << endl;
            if (strcmp(child->name(), lookout) == 0) {
                return child;
            }
            processNode(child, lookout);
        }
    
        return nullptr;
    }
eh57zj3b

eh57zj3b1#

你应该写信的

return processNode(child, lookout);

您应该指定要返回递归调用的结果。
当你编写没有return语句的函数调用时,它所做的只是创建本地临时对象,该对象由函数processNode返回,它会立即删除它。想象一下,你想从g函数返回f函数的结果,你会这样写。

Some_Type f()
{
    if(.....)
    {
        ....
    }
    return g();
}

递归调用也是一样。你想返回下一次调用的结果。所以你的最终函数应该是

xml_node<>* processNode(xml_node<>* node, char* lookout)
    {
        for (xml_node<>* child = node->first_node(); child; child = child->next_sibling())
        {
            cout << "processNode: child name is " << child->name() << " comparing it with " << lookout << endl;
            if (strcmp(child->name(), lookout) == 0) {
                return child;
            }
            return processNode(child, lookout); // Here is the sub.
        }
    
        return nullptr;
    }
qojgxg4l

qojgxg4l2#

你需要返回递归的结果-递归函数的工作方式和非递归函数完全一样,并返回到调用它们的地方。
但是,您不能直接返回它,因为这样您只能查看其中一个子对象。
您需要首先存储该值,然后仅在找到所需内容时才返回该值。
大概是这样的

for (xml_node<>* child = node->first_node(); child; child = child->next_sibling())
    {
        if (strcmp(child->name(), lookout) == 0) {
            return child;
        }
        xml_node<>* result = processNode(child, lookout);
        if (result != nullptr) {
            return result;
        }
    }

相关问题