簡體   English   中英

使用遞歸java進行二分搜索

[英]Binary Search using recursion java

我正在嘗試編寫一種方法,我可以僅使用二進制搜索和遞歸來找到所需數字的索引。 這是我寫的方法:

public static int binSearch_r (int[] data, int value, int from, int to)
    {
        if (from <= to)
        {
            int middle = (from+to)/2;
            if (data[middle] > value)
            {
                binSearch_r(data, value, from, middle - 1);
            }
            else if (data[middle] < value)
            {
                binSearch_r(data, value, middle+1, to);
            }
            else
            {
                return middle;
            }
        }
        return -1;
    }

data 是輸入的原始數組,value 是我要查找的數字,from 是數組最左邊的索引,to 是數組最右邊的索引。

我用來測試這個方法的數組只是 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}。 但是,當我將 value 設置為 9,初始“from”為 0 並將初始“to”設置為 array.length-1 時,我收到 -1 而不是所需的索引。 對於我為值設置的任何數字都會發生這種情況。 我做錯了什么?

如果您不熟悉遞歸,是一個很好的資源,可以在 Java 上下文中很好地解釋它。

在遞歸二分查找中,如果找不到正確的索引,遞歸方法會減少搜索空間。 隨着搜索空間的減少,該方法將調用自己在這個減少的空間內查找索引。 每個遞歸調用都期望返回一個值。

public static int binSearch_r (int[] data, int value, int from, int to) {
    if (from <= to) {
        int middle = (from+to)/2;

        if (data[middle] > value) {
            return binSearch_r(data, value, from, middle - 1);
        } else if (data[middle] < value) {
            return binSearch_r(data, value, middle+1, to);
        }
        return middle;            
    }
    return -1;
}

(從評論轉移到回答問題)

def bs(array,target_value,i,j):
    # here i is initial postion and j is last position of array 
    mid=(i+j)//2
    if array[mid]==target_value:
        return mid
    if array[mid]>target_value:
         j=mid-1
         return bs(array,target_value,i,j)
         
    if array[mid]<target_value:
        i=mid+1
        return bs(array,target_value,i,j)



array=[1,2,3,4,5,6,7]
x=bs(array,7,0,7)
print(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM