用递归进行二分法查找,求大神看一下哪边错了,调试了就停止运行

#include
int binary_search_recursive(int arr[], int left, int right, int query);

int main ()
{
int arr[10];
int left, right, query;
int i , res_r;

printf ("请输入数据:");
for (i = 0; i <= 9; i++)
scanf ("%d" , &arr[i]);

printf ("输入区间:");
scanf ("%d%d" , &left , &right);

printf ("输入要查找的数据:");
scanf ("%d" , &query);

res_r = binary_search_recursive(arr , left , right , query);

printf ("%d\n" , res_r);
return 0;

}
int binary_search_recursive(int arr[], int left, int right, int query)
{
int low = left , high = right , mid;
int flag = 0;

mid = (low + high) / 2;
if (low > high)
    flag = -1;
if (query == arr[mid])
    flag = 1;
if (arr[mid] > query)
    binary_search_recursive(arr , low , mid - 1 , query);
else
    binary_search_recursive(arr , mid + 1 , high , query);


if (flag == 1)
return mid;
if (flag == -1)
return -1;

}

low > high 应该直接返回了,你还在继续递归

递归出口设计得有问题

函数return根据flag倒是没什么问题,可是按你这个写法即便是low>high也会继续执行后面的查找算法,并且在arr[mid]不等于query时直接就没有返回值了,槽点有点多.稍微改了下函数,运行是没什么问题了,可是二分查找要求有序,你这里随便给个数组不用先检测是否有序吗.

int binary_search_recursive(int arr[], int left, int right, int query)
{

int low = left , high = right , mid;
mid = (low + high) / 2;
if (low > high)
    return -1;
if (query == arr[mid])
    return mid;
if (arr[mid] > query)
    return binary_search_recursive(arr , low , mid - 1 , query);
else
    return binary_search_recursive(arr , mid + 1 , high , query);

}

这种问题我建议你设置断点单步调试,并且设置个打印,很容易就能找出,对自己也是个很好的提升