【问题标题】:Bug in recursive binary search method?递归二进制搜索方法中的错误?
【发布时间】:2026-01-26 07:15:01
【问题描述】:

我正在尝试编写一种方法来对一组人员执行二进制搜索。该方法应返回找到此人的索引,如果不存在则返回-1。出于某种原因,即使该人在数组中,该方法似乎也会返回 -1。请帮助我是初学者。

public static int binarySearchRecursive(Person[] a, Person p) {
    int right = a.length -1;
    int left = 0;
    return binarySearchRecursive(a, p, left, right);
}
private static int binarySearchRecursive(Person[] a, Person p, int left, int right) {
    int mid = (left + right) / 2; 

    if (a[mid].compareTo(p) == 0) 
        return mid;

    if (left == right) 
        return -1;

    else {
        if (a[mid].compareTo(p) > 0) {
            return binarySearchRecursive(a, p, left, mid);
        }
        else {
            return binarySearchRecursive(a, p, mid, left);
        }
    }
}

  public static void main(String[] args) {
    Person s = new Person("shlomo",13);
    Person m = new Person("menachem",15);
    Person y = new Person("yehuda",18);
    Person a = new Person("atara",20);



    Person [] array = {s, m, y, a};

【问题讨论】:

  • 您能否发布一个 People 数组的示例,但对您来说是失败的。我做了一个快速测试,它在我的测试中正常工作。我怀疑它有时可能会起作用,但只会在某些输入上失败。
  • @user1118321 我发布了我使用的数组。当我在数组中搜索 y 时它不起作用。
  • 你能提供类Person代码吗?

标签: recursion search binary-search


【解决方案1】:

我可以看到两个问题:

  1. 在第二个递归调用中,您为左边界传递mid,为右边界传递left。这似乎不对。
  2. 如果你搜索最后一个Personmid的计算永远不会前进,left永远不会等于right,所以它无限递归。

【讨论】: