递归函数 二分查找法 的一些用法
#递归函数#: 自己调用自己
# def func1(): # print(666) # func1() # func1() # import sys # sys.setrecursionlimit(100000)
# 默认最大递归深度 998
count = 0 def func1(n):n += 1print(n)func1(n) func1(count)
PS 太白 23 岁, 日天比太白大两岁, wusir比日天大两岁, alex比wusir大两岁 求出alex的年纪
# def age(n): # if n == 1: # return 23 # else: # return age(n-1) + 2 # # print(age(4)) # 23 + 2 + 2 + 2
分解步骤:
""" def age(4):if n == 1:return 23else:return age(n-1) + 2 age(4) = age(3) + 2ret = age(4)def age(3):if n == 1:return 23else:return age(n-1) + 2 age(3) = age(2) + 2def age(2):if n == 1:return 23else:return age(1) + 2 age(2) = age(1) + 2def age(1):if n == 1:return 23 age(1) = 23else:return age(1) + 2 """
# 算法: 用代码写的计算方式。# 二分查找是最简单的算法,比较经典的算法。# 数字序列,有序,不重复。
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]在此列表找到 66 的索引 第一种方法
# print(l.index(66))
第二种方法
# count = 0 # for i in l: # if i == 66: # print(count) # count += 1 # for i in range(len(l)): # if l[i] == 47: # print(i) # break # # else: # print('找不到....')
第三种方法
思路 :
目标值:aim = 66 寻找中间索引: min_index = len(l) // 2 aim 与 中间索引对应的值进行比较 aim > l[min_index]: l[min_index+1:] aim < l[min_index]: l[:min_index-1] aim == l[min_index] return min_index
第一次尝试版
# print(len(l))# l1 = [1, 3, 5, 7, 8, 10, 11] # def binary_search(li,aim): # 1次:[1, 3, 5, 7, 8, 10, 11] aim 8 2次 :li = [ 8, 10, 11] 8 # mid_index = len(li) // 2 # 1次:min_index: 3 2 次:min_index 1 3次:0 # # if aim > li[mid_index]: # 1次:8 > 7 # return binary_search(li[mid_index+1:], aim) # [ 8, 10, 11] 8 # # elif aim < li[mid_index]: # 2 次:8 < 10 # return binary_search(li[:mid_index], aim) # 3次: [8] 8 # # elif aim == li[mid_index]: # return mid_index # else: # return None # print(binary_search(l1,8))
第二次尝试版
# l1 = [1, 3, 5, 7, 8, 10, 11] # # def binary_search(li,aim,start=0,end=None): # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6,start 0,end 6 # # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3 # # 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:2,end:3 # # 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3 # # 第五次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3 # end = len(li) - 1 if end is None else end # mid_index = (end - start) // 2 + start # 第一次 mid 3 第二次:mid 1 第三次:mid:2 第四次:mid:3 # # if aim > li[mid_index]: # return binary_search(li, aim, start=mid_index+1, end=end) # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 2 end:3 # # 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 3 end:3 # elif aim < li[mid_index]: # return binary_search(li, aim, start=start, end = mid_index) # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3 # # 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3 # elif aim == li[mid_index]: # return mid_index # else: # return None # # print(binary_search(l1,6))
第三次最终版
l1 = [1, 3, 5, 7, 8, 10, 11]def binary_search(li,aim,start=0,end=None): # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6,start 0,end 6# 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3# 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:2,end:3# 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3# 第五次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3end = len(li) if end is None else endmid_index = (end - start) // 2 + start # 第一次 mid 3 第二次:mid 1 第三次:mid:2 第四次:mid:3if start <= end:if aim > li[mid_index]:return binary_search(li, aim, start=mid_index+1, end=end) # 第二次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 2 end:3# 第三次:[1, 3, 5, 7, 8, 10, 11] aim 6 start: 3 end:3elif aim < li[mid_index]:return binary_search(li, aim, start=start, end = mid_index) # 第一次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:0,end:3# 第四次:[1, 3, 5, 7, 8, 10, 11] aim 6 start:3,end:3elif aim == li[mid_index]:return mid_indexelse:return Noneprint(binary_search(l1,11))
转载于:https://www.cnblogs.com/HoneyTYX/p/9057815.html
递归函数 二分查找法 的一些用法相关推荐
- Python 关于下标的运用技巧(二分查找法,冒泡、选择、插入、归并、快速排序算法)
二分查找法(折半查找法)的递归实现 二分查找法(折半查找法):用于预排序列表的查找问题, 再次强调,二分查找法要配合排序使用,只有排好序,才能使用二分查找法 而且,待查找列表如果有重复值,只能查找到其 ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...
- java二分查找法_java算法之二分查找法的实例详解
java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...
- java 二分查找_计算机入门必备算法——二分查找法
1.引言 笔者对于计算机的研究一直停滞不前,近期想对一些算法进行复习和进一步的研究,每天都会更新一个新的算法,算法有难有易,层层递进.不希望能学的有多么高深,只希望在一些最基本的算法上有编码的思路,或 ...
- 每天5分钟玩转python3算法:二分查找法
从今天开始,博主准备开始一段常见算法的学习,算法实现使用Python3,希望坚持下去^_^ alg1:二分查找法 1.运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + ...
- java for循环和数组--冒泡排序、二分查找法
//100以内与7相关的数 for(int a=1;a<=100;a++){ if(a%7==0||a%10==7||a/10==7){ System.out.print(a+ ...
- 学习练习 java 二分查找法
1 package com.hanqi; 2 3 import java.util.*; 4 5 public class Test5 { 6 7 public static void main(St ...
- 二分查找法、顺序查找法
//二分查找法 第一种方法 function erfen($x,$arr){$count=count($arr);$s=0;$h=$count-1;while ( $s<= $h) {$midd ...
- java算法2_二分查找法
比如现在有个记录名单的字典,里面的名字是按A-Z的顺序排好的,现在我想找Lily这个人.我可以从第一页开始一页一页的翻,但显然这样效率太低了.我可以怎么做呢?首先我直接翻到字典的中间位置,假如发现这里 ...
- 二分查找法---java实现
package com.hbut.test2; public class BinaryFind { public static void main(String[] args) { int arr[] ...
最新文章
- 差异基因分析:fold change(差异倍数), P-value(差异的显著性)
- MATLAB和Python读取wave文件的波形对比
- 手机与笔记本蓝牙配对
- XenDesktop5 SP1发布在即
- Nginx的启动、停止
- ModuleNotFoundError: No module named 'tinymce
- oracle 连接greenplum,Oracle通过DBLINK访问GreenPlum
- Pandas 分割字符串
- 淮阴工学院计算机专业的考研率,淮阴工学院江淮学院(淮阴工学院考研录取率)...
- solr集群solrCloud的搭建
- user 不在 sudoers 文件中。此事将被报告。
- 动态cookie-ob混淆
- 计算机技能培训工作计划,计算机培训教学计划范文
- 知乎:前端IDE 那个流行,那个好;
- 干货 | 携程平台化常态化数据治理之路
- julia语言 python解释器_Julia官宣:为机器学习构建一种语言和编译器
- 静态,关键字:static 接口,IUSB , API 接口关键字:interface
- idea git拉取文件变蓝色,将蓝色变成白色的解决方法
- 高并发基础之Java并发包
- 马克鳗标记及文字图片工具安装步骤mac版本
热门文章
- 关于安装centOS精简版ifconfig无效的问题
- [渝粤教育] 武汉理工大学 金属工艺学B 参考 资料
- 【渝粤教育】国家开放大学2018年秋季 2094T法理学 参考试题
- 小数据、高准确率的文本分类:利用迁移学习创造通用语言模型
- MOOSE相场模块的内核模型
- MATLAB 与Modelsim之间对测试系统的联合仿真
- (转)Linux中的screen命令使用
- chrome调式工具
- go tour - Go 入门实验教程
- 连表查询 个人感觉就是根据笛卡尔积产生的数据后 每条去匹配如果 匹配成功那么就筛选出来...