迭代地并递归地查找向量中是否存在元素

时间:2014-12-05 09:37:57

标签: c++ recursion vector

我有一个家庭作业,使用C ++中的向量。我必须实现两个向量的交集和差异,以及递归的所有向量。

首先,我创建迭代版本,工作得很好:

bool mfind(int x, vector<int> array) {
    if (array.size() != 0) {
        while (array.size() != 0) {
            if (array.back() == x) {
                return true;
            } else {
                array.pop_back();
            }
        }
        return false;
    } else {
        cout << "array is empty" << endl;
        return false;
    }
}

然后我试着递归:

bool mfind(int x, vector<int> array) {
    if (array.size() != 0) {
        if (array.back() == x) {
            cout << "array.back == a" << endl;
            return true;
        } else {
            cout << "array.back = " << array.back() << endl;
            array.pop_back();
            mfind(x, array);
        }
    } else {
        cout << "array is empty" << endl;
        return false;
    }
}

我做错了什么,因为如果我将函数结果保存在一些bool var中,结果都是,true和false!

1 个答案:

答案 0 :(得分:5)

您缺少的是递归调用中的return语句:

cout << "array.back = " << array.back() << endl;
array.pop_back();
return mfind(x, array);

基本上你想做的是:

  • 如果数组为空,则返回false,搜索到的元素不存在。
  • 如果最后一个元素是搜索元素,则返回true,搜索到的元素就在那里。
  • 如果最后一个元素不是搜索元素返回,则该元素是否在列表的其余部分中。