java - 索引外的递归二分搜索数组

标签 java arrays sorting recursion

public static void main(String[] args) {
    int [] arr = {11,14,18,22,36,89,125};
    System.out.println(recursive_binary_search(arr,0,arr.length,989));

}


public static int recursive_binary_search(int[] A,int p,int r,int x) {

    if( p > r) {

        return -1;
    }else {
        int q=(p+r)/2;
        if(A[q]==x) {

            return q;
        }else if(A[q]>x) {

            return recursive_binary_search(A,p,q-1,x);
        }else {
            return recursive_binary_search(A,q+1,r,x);

        }


    }


}

嘿,感谢您的阅读。我对这种递归二分搜索方法有一些问题。当我尝试搜索不在数组中的内容时,java 给我“线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 7”。

由于 p>r 条件,我认为它应该返回 -1。我尝试将条件更改为 p>=r 但对于数组中实际存在的内容,它将返回 -1。我究竟做错了什么?非常感谢

最佳答案

您的搜索应从 0 开始到 arr.length-1

System.out.println(recursive_binary_search(arr,0,arr.length-1,989));

关于java - 索引外的递归二分搜索数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804622/

相关文章:

java - Codename 通过 Linkedin 进行一次登录

java - 为什么我应该在以下场景中重写 equals 和 hashcode 方法

c++ - 如何声明一个数组然后在另一行赋值

java - 查找数组所有可能组合的所有可能组合

java - Android 如何将字符串数组设置为单个 TextView

XPage 中的 java.util.ConcurrentModificationException

arrays - 可以在 Typescript 中定义重复的元组吗

C# 计算时间序列 SortedList<DateTime, double> 的移动中位数 - 提高性能?

android - Swift vs Kotlin 在排序数组上的表现

r - 按R中的多个条件排列