2401_87108891 2024-10-17 20:55 采纳率: 4.5%
浏览 42

【递归】二分查找(C++)

【递归】二分查找
描述

用递归算法实现二分查找,即:有n个已经从小到大排序好的数据(不重复),从键盘输入一个数X,用对半查找方法,判断它是否在这n个数中。

输入

第一行,正整数n,N<=10^5;

第二行,n个整数(int范围内,不重复),中间用空格分隔;

第三行,整数X。

输出

如果找到X,输出其位置;否则输出-1。

输入样例 1

10
10 20 30 40 50 60 70 80 90 100
90
输出样例 1

9

  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-17 20:56
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这是一个二分查找的递归实现的问题。在二分查找中,我们假设有一个排序好的数组,并且我们正在寻找一个特定的值。如果数组为空或者我们找到了我们正在查找的值,那么递归就会停止。否则,我们将数组分成两半,并在其中一半上递归调用二分查找。以下是一个可能的C++实现:

    #include <iostream>
    using namespace std;
    
    int binarySearchRecursive(int arr[], int n, int target, int low, int high) {
        if (low > high) {  // 如果low大于high,说明没有找到目标值
            return -1;
        }
        int mid = low + (high - low) / 2;  // 避免溢出问题,正确计算中间位置
        if (arr[mid] == target) {  // 如果找到目标值,返回其位置
            return mid;
        } else if (arr[mid] > target) {  // 如果目标值小于中间值,搜索左半部分数组
            return binarySearchRecursive(arr, n, target, low, mid - 1);
        } else {  // 如果目标值大于中间值,搜索右半部分数组
            return binarySearchRecursive(arr, n, target, mid + 1, high);
        }
    }
    
    int main() {
        int n;
        cin >> n;  // 输入正整数n
        int arr[n];  // 输入n个整数并存储在数组中
        for (int i = 0; i < n; i++) {
            cin >> arr[i];
        }
        int target;  // 输入要查找的整数X
        cin >> target;
        int result = binarySearchRecursive(arr, n, target, 0, n - 1);  // 开始递归二分查找
        cout << result << endl;  // 输出结果,如果找到则输出位置,否则输出-1
        return 0;
    }
    

    这段代码首先定义了一个递归函数 binarySearchRecursive 来执行二分查找。然后在 main 函数中,我们输入正整数 n 来定义数组的大小,接着输入 n 个整数作为数组元素,再输入要查找的整数 target。最后我们调用 binarySearchRecursive 函数开始查找并输出结果。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月17日