Хорошо, это для школьного задания. У меня не было проблем с рекурсивным бинарным поиском, но в назначении прямо говорится, что метод должен принимать только 2 аргумента, список и элемент, который вы ищете. Вот где я немного заблудился.
public int binarySearch(List<Card> cards, Card key)
{
int mid = (cards.size()) / 2;
if(cards.size() == 1) {
if(key.equals(cards.get(0))) {
return 0;
}
}
else {
if(key.equals(cards.get(mid))) {
return mid;
}
else if(key.compareTo(cards.get(mid)) == - 1) {
return binarySearch(cards.subList(0, mid), key);
}
else if(key.compareTo(cards.get(mid)) == 1) {
return mid + 1 + binarySearch(cards.subList(mid + 1, cards.size()), key);
}
}
return -1;
}
Так что это будет работать нормально, если я не буду искать что-то, чего не существует и не принадлежит к верхней половине списка. Поскольку я передаю только 2 аргумента, мне нужно изменять список при каждом рекурсивном вызове, однако, если он находится в верхней половине, я не могу потерять свое индексное пятно, поэтому мне нужно добавить их туда с помощью рекурсивного вызова, если он оказывается не в верхней половине, тогда он возвращает -1 + все те индексы, которые я учел ранее. Есть ли способ очистить все это и заставить его просто вернуть -1? Любые советы приветствуются.