我的递归二分查找算法始终找不到目标值,请问问题出在哪里?
错误点梳理
- 递归二分查找函数未返回递归调用结果:你编写的
RecBinarySearch函数中,两次递归调用RecBinarySearch(a, mid + 1, high, key)和RecBinarySearch(a, low, mid - 1, key)前没有加return关键字,导致递归分支查询到的正确索引无法向上层传递,无论是否命中目标,函数最终都会执行到末尾的return -1逻辑。 - 数组初始化非法:你定义数组时
int n{}默认初始化值为0,后续new int [n]创建的是长度为0的空数组,无法存储任何待查找的元素。 - 隐性前置要求未满足:二分查找的运行前提是待查询数组为有序数组,如果数组未排序,也会出现查找结果不符合预期的情况。
修复代码
二分查找函数修复
int RecBinarySearch (int a[], int low, int high, int key) { if (high >= low) { int mid = low + (high - low)/2; if (key == a[mid]) return mid; if (key > a[mid]) return RecBinarySearch(a, mid + 1, high, key); else return RecBinarySearch(a, low, mid - 1, key); } return -1; }
数组初始化&调用示例
// 正确指定数组长度,填充有序测试数据 int n = 5; int* a = new int [n] {2,4,6,8,10}; // 调用查找时high参数需传入数组最大索引即n-1 int result = RecBinarySearch(a, 0, n-1, 8);
内容的提问来源于stack exchange,提问作者sasanace
相关产品推荐
相关产品推荐

