2014-12-05 94 views
-1

我有一個家庭作業,在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; 
    } 
} 

我是什麼做錯了,因爲如果我保存功能結果一些布爾變量,結果是真,假!

+0

超出問題範圍,但也許這不是作業所期望的。有更快的替代方法來查找數組的交集或差異。 – Misch 2014-12-05 09:48:50

+0

是的範圍是完全正確的。我必須重新實現矢量已經具備的所有功能。 OMG! – virusss8 2014-12-05 13:41:10

回答

5

你所缺少的是遞歸調用return語句:

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

基本上你想要做的是:

  • 如果數組爲空,返回false,搜索到的元素不在那裏。
  • 如果最後一個元素是搜索到的元素,返回true,搜索到的元素就在那裏。
  • 如果最後一個元素不是搜索的元素,返回,該元素是否在列表的其餘部分。
+0

OMG!那是對的。我怎麼能錯過這樣的事情。非常感謝你 – virusss8 2014-12-05 13:41:59