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

vir*_*ss8 -1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我试着递归地做:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Mis*_*sch 5

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

cout << "array.back = " << array.back() << endl;
array.pop_back();
return mfind(x, array);
Run Code Online (Sandbox Code Playgroud)

基本上你想要做的是:

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