带有for循环的递归函数:返回值问题

recursive function with for loop: return value issue

本文关键字:返回值 问题 递归函数 for 循环 带有      更新时间:2023-10-16

我试图编写的这个递归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;
}