递归函数在返回后继续

时间:2020-05-06 01:21:58

标签: c++ recursion

编辑:以下问题已解决。但是,我有一个后续问题。有时我的教授在进行递归调用时不会返回。我怎么知道何时应该返回递归调用与何时应该只递归调用函数?

我正在编写一个递归函数,以查看二进制搜索树是否包含某个键。将显示短语“键匹配包含”,因此找到了键,但是函数仍返回false。我注意到无论何时搜索左子树,它都会返回false。对出什么问题有任何想法吗?预先谢谢你。

内部方法:

template <typename K>
bool Multiset<K>::Contains(std::unique_ptr<Node> &n, const K &key) {
  if (!n) {
    std::cout << "Contains returns null" << std::endl;
    return false;
  }

  if (n->key == key) {
    std::cout << "Key match Contains" << std::endl;
    return true;
  } else if (key < n->key) {
    Contains(n->left, key);
  }
  return Contains(n->right, key);
}

外部方法:

template <typename K>
bool Multiset<K>::Contains(const K &key) {
  return Contains(root, key);
}

2 个答案:

答案 0 :(得分:0)

您将搜索结果放在该部分中:

    Contains(n->left, key);

例如,应该这样:

    if (Contains(n->left, key)) return true;

答案 1 :(得分:0)

您需要放置return Contains(n->left, key);而不是Contains(n->left, key);