[英]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.