Я пытаюсь написать функцию, которая рекурсивно проверяет, является ли данный вектор A в любом смежном блоке в векторе B. Например, если A={5,6,7}
и B={1,2,3,4,5,6,7}
, он должен вернуть true. Если B = {1,2,3,4,5,7,6}
, он должен вернуть false
. В настоящее время мой код продолжает выводить true
, потому что я не думаю, что моя логика правильная. Я не смог изменить его, чтобы дать какие-либо результаты. Любая помощь будет оценена!Как рекурсивно сравнить векторы?
bool r_app(vector<int>& a1, vector<int> b1, size_t k)
{
k=0;
if (a1.size() == 0) {
cout << "true";
return true;;
}
for (int i=0;i<a1.size();i++){
for(int j=0;j<b1.size();j++){
if (a1.at(i)==b1.at(j)) {
cout << "true" << endl;
return true;
}
}
cout << "false" << endl;
return false;
return r_app(a1,b1,k+1);
}
}
EDIT: Так это то, что я получил от Smac89, и я добавил COUT линии так, что, когда я вызываю функцию в основном, он выдает либо истинным, либо ложным. Функция в настоящее время выводит значение true для каждого истинного ввода, но не выводит false. Я не уверен, почему.
bool r_app(std::vector<int>& a1, std::vector<int> &b1, std::size_t start)
{
std::size_t savedPos = start + 1, k = 0;
for (; k < a1.size() && start < b1.size() && a1[k] == b1[start];
k++, start++)
{
if (k != 0 && a1[0] == b1[start])
savedPos = start;
}
if (k == a1.size())
cout << "true" << endl;
return true;
if (start < b1.size())
return r_app(a1, b1, savedPos);
cout << "false" << endl;
return false;
}
'a1.at (I) = b1.at (J) 'не является проверка на равенство, вы присваиваете значения в одном векторе к значениям в Другие. Вы забыли один знак равенства. ('=' является присваиванием; '==' является проверкой равенства.) Кроме того, даже с фактическим тестом равенства это остановится на первом равном элементе и объявит завершение теста - оно вернет true, если первый вектор содержит элемент, который равен любому элементу второго вектора. – cdhowie
@cdhowie Это полностью проглотило мой разум, спасибо.Тем не менее, я до сих пор не уверен, как изменить мой цикл так, чтобы он проверял, присутствуют ли все элементы из A в B. – sparta93
, чтобы использовать 'std :: search'. '#include' –
elimad