在上一篇中简单介绍了递归的使用,请戳这里 。  在此篇中,主要介绍如何用递归实现二分法。

在使用二分法之前,首先要有个前提,那就是这个数组必须是有序数组。主要的思路为:

  ①先取出数组中的一个中间值, 和我们需要找的数字进行对比,如果恰好相等,则说明找到该数字,如果数组的中间值大于需要查找的数组,接下来的查找范围就为中间值之前的数组。反之为中间值之后的数组

 ②对数组不断的缩小范围,最后当数组中只有一个数字时,再进行比较,如果相等,则找到,否则需要查找的数字就不在我们的数组中。

代码如下:

def binary_search(data_source, find_number):
"""定义二分法"""
mid = int(len(data_source)/2) #先取数组中的中间值
if len(data_source) > 1: #判断整个数组中的数字个数
if data_source[mid] > find_number:
print('data is left of %s' % data_source[mid])
binary_search(data_source[:mid], find_number)
elif data_source[mid] < find_number:
print('data is right of %s' % data_source[mid])
binary_search(data_source[mid:], find_number)
else:
print('find the number %s' % find_number)
elif len(data_source) == 1: #如果没有这个判断,当只剩一个数字时,会进入死循环
if data_source[mid] == find_number:
print('find the number %s' % find_number)
else:
print('not find the number') if __name__ == '__main__':
data = list(range(1, 8, 2)) #一个包含为[1, 3, 5, 7]的有序列表
number = 1
binary_search(data, number) -----结果-----
data is left of 5
data is left of 3
find the number 1

  

python-使用递归实现二分法的更多相关文章

  1. python之递归与二分法

    1. 递归 自己调用自己 递归的入口(参数) 和 出口(return) 树形结构的遍历 import os def func(lujing, n): lst = os.listdir(lujing) ...

  2. python之匿名函数、递归与二分法

    一.匿名函数 什么是匿名函数? 顾名思义就是没有名字的函数,在我们声明一个函数时会想起个什么函数名好,这个问题我想有时候会困惑大家的吧?   def func(): #正常函数声明 pass prin ...

  3. python函数:匿名函数、函数递归与二分法、面向过程编程

    今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...

  4. python中递归调用

    递归一个通俗的解释就是,在函数中调用函数本身:伪代码如下: In [31]: def fun(): ....: fun() # 这个递归没有任何作用,只是为了说明什么是递归 递归(Recursion) ...

  5. PYTHON-匿名函数,递归与二分法,面向过程编程-练习

    # 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...

  6. PYTHON-匿名函数,递归与二分法,面向过程编程

    """匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...

  7. 关于python最大递归深度 - 998

    今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...

  8. Python的递归

    递归 是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知.使用递归解决问题,思路清晰,代码少.但是在主流高 ...

  9. Python的递归深度

    RuntimeError: maximum recursion depth exceeded while calling a Python object 大意是调用 Python 对象时超出最大深度限 ...

随机推荐

  1. office2007安装时显示安装程序找不到 office.zh-cn\officeLR.cab怎么办

    根本原因是和VS2008有关解决方法如下:1. 找到vs2008安装程序(光盘,镜像文件,解压文件都一样),找到WCU文件夹在他里面找到WebDesignerCore文件夹,然后打开它找到WebDes ...

  2. C中的私有成员

    skynet_context声明在.h里 但定义在.c里面 外部使用的时候无法用ctx->handle获取私有成员,会提示解引用类型错误 必须用.h里函数获取ctx里属性.

  3. Oracle中实现find_in_set

    CREATE OR REPLACE FUNCTION FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',') ...

  4. Grunt插件uglify

    Gruntfile.js里面配置: module.exports = function(grunt){ // 项目配置 grunt.initConfig({ pkg: grunt.file.readJ ...

  5. git管理之源切换

    Git remote 修改源 git commit -m "Change repo." # 先把所有为保存的修改打包为一个commit git remote remove orig ...

  6. 学习笔记flexbox新布局

    FlexBox简称“弹性盒子”,除了用于实现弹性布局,还可以用来居中内容,改变标记中的源码顺序.首先说明IE9及以下浏览器不支持FlexBox. .flex{ display:flex; flex:1 ...

  7. pdf预览

    从服务器取回pdf流数据,通过iframe在html页面展示 不废话,,直接代码: <html> <head> <meta charset="UTF-8&quo ...

  8. 转:hive面试题

    有一张很大的表:TRLOG该表大概有2T左右TRLOG:CREATE TABLE TRLOG(PLATFORM string,USER_ID int,CLICK_TIME string,CLICK_U ...

  9. 30_AQS

    [参考文章] https://www.jianshu.com/p/df0d7d6571de http://ifeve.com/introduce-abstractqueuedsynchronizer/ ...

  10. 29_Future模式2_JDK内置实现

    [Future使用场景] Future表示一个可能未完成的一部任务的结果,针对这个结果可以添加CallBack,以便在任务执行成功或失败后作出相应的操作. Future模式非常适合在处理耗时很长的业务 ...