递归算法实现二分查找

简介: 本文简要介绍了递归实现的二分查找算法,这是一种在有序列表中快速查找的策略。递归方法虽在实际应用中较少,但有助于理解递归思想,为学习数据结构中的树内容打下基础。文中提供了原版和递归版本的二分查找代码,并强调了递归算法中处理未找到情况的注意事项。此外,还提到了递归在解决复杂问题时的优势,并通过链接分享了一个关于递归实现素数判断的例子。

本文简单介绍二分查找的递归算法。


对一个有序的列表通过按中间元素切分搜索空间进行快速查找的,也可以通过递归方法实现。


虽然该算法实际应用中较少,但其中的递归思路大家可以熟悉一下,为学习数据结构中树的相关内容作一个铺垫。前后代码都简单易懂,因而不作过多的赘述,诸位读者直接阅读代码即可。唯一的点在于,递归算法中找不到的情况“return -1”的书写位置和条件需要注意。


本文的呈现想法和下面这篇文章相同,作为开拓思路、加深对递归函数的理解而为之。其实很多基础的算法,包括斐波那契数列、闰年等,都可以用递归实现。递归思路能将复杂的问题呈现以简单的思路,这是它的优势。通过简单问题的递归实现,大家可以提前熟悉递归的构造和运用,为后续学习数据结构“树”的相关内容作铺垫。


递归实现素数判断


https://blog.csdn.net/weixin_45423659/article/details/137929767?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22137929767%22%2C%22source%22%3A%22u012979538%22%7D&fromshare=blogdetail


原二分查找代码


int binarySearch(int* arr,int left,int right,int key){
  while(left <= right){
    int mid = (left+right)/2;
    if(key > arr[mid]){
      left = mid + 1;
    }else if(key < arr[mid]){
      right = mid - 1;
    }else{
      return mid;
    }
  }
  return -1;
}


递归二分查找代码


思路:将迭代换为递归


1. 找重复(规模更小)


每次重复的过程均为:判断目标数字key与中间元素arr[mid]的大小 --> 缩小范围


2. 找变化(确定参数)


变化的量始终是查找范围的边界(left和right),将它们写入递归函数的参数列表。


3. 找出口


当找到目标数字时,递归函数开始返回值mid,因而条件即为 key == arr[mid]


int binarySearch(int* arr,int left,int right,int key){
 
  if(left > right){
    return -1;
  }
  int mid = (left+right)/2;
  if(key > arr[mid]){
    //left = mid + 1;
    binarySearch(arr,mid + 1,right,key);
  }else if(key < arr[mid]){
    //right = mid - 1;
    binarySearch(arr,left,mid-1,key);
  }else if(key == arr[mid]){
    return mid;
  } 
}


时间复杂度与空间复杂度均为O(logN)




相关文章
|
1月前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
1月前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
1月前
|
存储 算法 索引
【优选算法】—— 二分查找
【优选算法】—— 二分查找
|
1月前
|
算法 测试技术 索引
算法-二分查找
算法-二分查找
19 0
|
4天前
|
机器学习/深度学习 算法 索引
数据结构算法--1 顺序查找二分查找
**顺序查找时间复杂度为O(n)**,适合无序列表,可以通过`enumerate`或直接遍历索引来实现。**二分查找时间复杂度为O(logn)**,适用于有序列表,利用Python中`left`、`right`指针和`mid`点不断缩小搜索范围。效率上二分查找更优。
|
5天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
13 1
|
18天前
|
算法 Java
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
JavaSE——算法(2/2):查找算法-二分查找(前言、详细图解、代码部分)
33 2
|
19天前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
27 1
|
1天前
|
算法
算法入门——二分查找
算法入门——二分查找
4 0
|
5天前
|
算法 搜索推荐 Python
算法===二分查找
算法===二分查找