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

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

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

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

代码如下:

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. golang的xml、json解析

    xml golang的xml处理主要应用Unmarshal.Marshal方法实现,解析一个xml到struct如下,首先是xml文件: <?xml version="1.0" ...

  2. 2017年12月14日 LinQ高级查&&Asp.net WebForm Asp.net MVC

    LinQ的高级查询用法 开头:StartsWith()结尾:EndsWith()模糊:Contains() 个数:Count最大值:Max(r => r.price)最小值:Min(r => ...

  3. 一:Redis安装

    redis在Linux上的安装 1)安装redis编译的c环境,yum install gcc-c++ 2)将redis-2.6.16.tar.gz上传到Linux系统中 3)解压到/usr/loca ...

  4. unity3d之技能栏冷却

    绑定在按钮上的脚本 using UnityEngine; using System.Collections; using UnityEngine.UI; public class CdCover : ...

  5. 第11章 Media Queries 与Responsive 设计

    Media Queries--媒体类型(一) 随着科学技术不断的向前发展,网页的浏览终端越来越多样化,用户可以通过:宽屏电视.台式电脑.笔记本电脑.平板电脑和智能手机来访问你的网站.尽管你无法保证一个 ...

  6. ssh和scp详解

    一.SSH客户端使用 使用ssh客户端远程登陆到指定的计算机: $ ssh {user}@{remote} -o IdentityFile=/home/id_rsa -o StrictHostKeyC ...

  7. SSRS 2008R2 执行Log 查询

    1. 可以参考ExecutionLog3试图,此为系统安装Reporting Service自带的试图. 2. 可以使用以下语句查询: SELECT els.LogEntryId, els.Insta ...

  8. EF+Oracle

    一个小项目,设计到几十张表,但都是简单的增删改查,所以呢,想偷懒用EF. 结果,在.NET4.0下,死活都不行.最后在Oracle官方找到demo,上面清清楚楚的写着必须>NET4.5. 看着E ...

  9. Python爬虫--- 1.1请求库的安装与使用

    来说先说爬虫的原理:爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取下来.这个时候就要用到请 ...

  10. Python爬虫教程-33-scrapy shell 的使用

    本篇详细介绍 scrapy shell 的使用,也介绍了使用 xpath 进行精确查找 Python爬虫教程-33-scrapy shell 的使用 scrapy shell 的使用 条件:我们需要先 ...