已知输人的序列表中的元素是有序的,请用递归算法实现二分查找。分查找是一种在有序序列中查找元素的方法,其基本思想是:将给定的关键码与表中间位置的元素进行对比,如果二者相等,则查找成功。如果该关键码小于表中间位置的元素,则待查找的元素一定在表的前半部分;否则待查找的元素一定在表的后半部分。继续缩小范围在前半部分或者后半部分进行同样的查找。如果查找成功,则函数返回“success”如果查找失败,则函数返回“fail”。
#include <iostream>
#include <vector>
std::string binarySearch(const std::vector<int>& nums, int target, int start, int end) {
if (start > end) {
return "fail"; // 查找失败,返回"fail"
}
int mid = start + (end - start) / 2; // 计算中间位置的索引
if (nums[mid] == target) {
return "success"; // 查找成功,返回"success"
} else if (nums[mid] > target) {
return binarySearch(nums, target, start, mid - 1); // 在前半部分查找
} else {
return binarySearch(nums, target, mid + 1, end); // 在后半部分查找
}
}
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9}; // 输入的有序序列
int target = 5; // 要查找的元素
std::string result = binarySearch(nums, target, 0, nums.size() - 1); // 调用二分查找函数
std::cout << result << std::endl; // 输出结果
return 0;
}