只有2个参数的递归二进制搜索方法

Joh*_*ers 8 java recursion binary-search

好的,这是一个学校作业.我在进行递归二进制搜索时没有遇到任何问题,但是赋值明确指出该方法应该只接受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;
}
Run Code Online (Sandbox Code Playgroud)

所以这将工作正常,除非我正在搜索不存在的东西,它属于列表的上半部分.因为我只传递2个参数,所以我必须用每个递归调用更改列表,但是,如果它在上半部分我不能丢失我的索引点,所以我必须在那里添加递归调用,如果它最终不在上半部分然后它返回-1 +我之前考虑的所有那些索引.有没有办法可以清除它并使其返回-1?任何建议表示赞赏.

ros*_*sum 2

您可以使用两种方法,其中一种方法调用另一种方法。公共方法公开了您的作业所需的两个参数接口。它还可以检查空参数 - 这种事情只需要在开始时检查一次。

您的第二个方法是私有的,只能从第一个方法内部调用。这是标准的递归二分搜索,具有您需要的多个参数。