递归 C++ 函数未返回正确的布尔值

柯丁顿乔尔

如果该值是向量的前 n 个条目之一,则该函数应该返回 true,否则返回 false。我已经为此工作了一段时间,但无法弄清楚为什么它无法正常工作。

template <class T>
bool find(const vector<T> &v,  T value, int n) {
    //base case
    if (n == 0) {
        cout << "not here" << endl;
        return false;
    }
    //general case
    if (v[n] == value) {
        cout << v[n] << " == " << value << endl;
        return true;
    }
    cout << "find(" << "v" << ", " << value << ", " << n - 1 << ")" << endl;
    find(v, value, n - 1);
}

couts 只是因为我不擅长调试。这是我测试的内容和结果:

vector<int> v = {1, 2, 3, 4, 5};
cout << boolalpha << find(v, 3, 4);

安慰:

find(v, 3, 3)
find(v, 3, 2)
3 == 3
false

显然,该函数正在查找匹配值,但我非常困惑为什么它仍然返回 false。

公民

你需要返回结果 find

return find(v, value, n - 1);

在你的函数中。

如果你打开警告,编译器会告诉你你做错了什么。

此外,您的基本情况似乎不正确。0是一个有效的索引。如果n是,你应该停止-1

与您的问题相关,使用递归方法在连续容器中查找元素似乎很奇怪。你为什么不试试像

std::find(v.begin(), v.begin() + n, value);

您可以比较findto的结果v.begin() + n以检查是否找到该元素。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章