用递归的思想的来解决这个问题
首先我们需要知道什么是递归:
递归的特点:1、自己调用自己
2、问题规模不断缩小或扩大
3、有退出条件
int binarysearch(int len,int *arr,int val,int left,int right) {
assert(arr != NULL);
if(left>right) return -1;
int index = (left + right)>>1;//这里用到的是 运算符左移 等价于 除2
if (arr[index] == val) return index;
else if (arr[index] > val) {
return binarysearch(len, arr, val, left, index - 1);
//如果中间值大于要查找的值,则右边界则-1
}
else {
return binarysearch(len, arr, val, index + 1, right);
}//反之左边界+1
return -1;//当条件全不满足是表示 没有该数值
}
int binarysearch0(int len,int* arr,int val) {//递归函数
int left = 0, right = len - 1;//左右边界初始值
return binarysearch(len,arr,val,left,right);
}
int main() {
int arr[]{1,3,5,7,9};
int len = sizeof(arr) / sizeof(arr[0]);