递归函数&二分查找
一、递归函数
1)定义
- 在函数中调用函数本身,就是递归
- 在python中递归的深度最大为1000,但实际达不到1000
def func():
print("-----func-----")
func() func()
2)应用
- 可以使用递归来遍历各种树形结构,比如文件夹系统:可以使用递归来遍历该文件夹中的所有文件
import os def func(filepath, n):
files_list = os.listdir(filepath) # 获取当前文件夹中的所有文件
for file in files_list:
file_d = os.path.join(filepath, file) # 拼接文件的真实路径
if os.path.isdir(file_d): # 递归入口 判断文件是否为文件夹
print("\t"*n, file)
func(file_d, n+1) #
else:
print("\t"*n, file) # 递归出口
二、二分查找
- 优点:每次能够除掉一半的数据,查找效率高
- 要求:查找的序列必须是有序序列
1) 非递归算法
a) 利用索引
# 让用户输入一个数n. 判断这个n是否出现在lst中
lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] left = 0
right = len(lst) - 1 num = int(input("请输入一个数n:"))
while left <= right:
mid = (left + right) // 2
if lst[mid] > num:
right = mid - 1
elif lst[mid] < num:
left = mid + 1
else:
print("这个数在lst中")
break
else:
print("这个数不在lst中")
2) 递归算法
a) 利用索引
# 让用户输入一个数n. 判断这个n是否出现在lst中
lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] def binary_search(lst, num, left, right):
if left > right:
return False
mid = (left + right) // 2
if lst[mid] > num:
right = mid - 1
return binary_search(lst, num, left, right)
elif lst[mid] < num:
left = mid + 1
return binary_search(lst, num, left, right)
else:return True num = int(input("请输入一个数n:"))
ret = binary_search(lst, num, 0, len(lst)-1)
print(ret)
b) 切换列表
# 让用户输入一个数n. 判断这个n是否出现在lst中
lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963] def binary_search(lst, num):
if len(lst) == 0:
return False
mid = (len(lst) - 1) // 2
if num > lst[mid]:
return binary_search(lst[mid+1:], num)
elif num < lst[mid]:
return binary_search(lst[:mid], num)
else:
print("这个数在lst中")
return True num = int(input("请输入一个数n:")) ret = binary_search(lst, num)
print(ret)
递归函数&二分查找的更多相关文章
- python 全栈开发,Day15(递归函数,二分查找法)
一.递归函数 江湖上流传这这样一句话叫做:人理解循环,神理解递归.所以你可别小看了递归函数,很多人被拦在大神的门槛外这么多年,就是因为没能领悟递归的真谛. 递归函数:在一个函数里执行再调用这个函数本身 ...
- lamda匿名函数(与sorted(),filter(),map() 一起用), 递归函数, 二分查找
一. 匿名函数 为了解决一些简单的需求而设计的一句话函数. lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数 语法: 函数名 = lambda 参数: 返回值 ...
- Python递归函数,二分查找算法
目录 一.初始递归 二.递归示例讲解 二分查找算法 一.初始递归 递归函数:在一个函数里在调用这个函数本身. 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去.但 ...
- python函数(4):递归函数及二分查找算法
人理解循环,神理解递归! 一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...
- Python递归函数和二分查找算法
递归函数:在一个函数里在调用这个函数本身. 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去.但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属 ...
- Python学习日记(十三) 递归函数和二分查找算法
什么是递归函数? 简单来说就是在一个函数中重复的调用自己本身的函数 递归函数在调用的时候会不断的开内存的空间直到程序结束或递归到一个次数时会报错 计算可递归次数: i = 0 def func(): ...
- python之装饰器补充与递归函数与二分查找
目录 多层装饰器 有参装饰器 递归函数 基本演示 斐波那契数列 总结 小拓展 算法之二分法 简介 举例 总结 多层装饰器 我们已经知道了语法糖的作用是将装饰对象自动装饰到装饰器中,一个语法糖的应用我们 ...
- 用Python实现的二分查找算法(基于递归函数)
一.递归的定义 1.什么是递归:在一个函数里在调用这个函数本身 2.最大递归层数做了一个限制:997,但是也可以自己限制 1 def foo(): 2 print(n) 3 n+=1 4 foo(n) ...
- day17 python递归案例(二分查找,三级菜单)
递归函数与三级菜单 menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {} ...
随机推荐
- 洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)
https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连 ...
- 利用Common-Fileupload上传文件图片
一,介绍 common-fileupload是appache的开源组件,基于该组件可以轻松实现文件上传的功能,strust框架的文件上传功能也是基于该组件. 二,使用 1,导入两个jar包:commo ...
- DB2 错误 54001
DB2 语句太长或者太复杂 SQLSTATE=54001 对数据库的参数的修改: db2 update db cfg for DB_NAME using STMTHEAP 4096 db2 updat ...
- Python/WSGI 应用快速入门--转
http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html 这个快速入门指南将会向你展示如何部署简单的 WSGI 应用和普 ...
- DBAplus社群线上分享----Sharding-Sphere之Proxy初探
功能 Cobar Mycat Heisenberg Shark TDDL Sharding-JDBC 是否开源 开源 开源 开源 开源 部分开源 开源 架构模型 Proxy架构 Proxy架构 Pro ...
- 利用html5canvas给图片增加文字水印
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- plpgsql: 动态插入数据 1
--目标:1.建立一个函数实现 输入一个表名(tableName)tableName,一个JSON串{feildName1:feildVale1,feildName2:feildVale2} -- 然 ...
- viewpager的使用-新方法 5.1
效果图: 添加依赖包: compile ‘com.android.support:design:22.2.0‘ 布局文件: <?xml version="1.0" encod ...
- 远程文件拷贝(fastcopy为例)
远程地址格式如下:\\IP地址\磁盘符号$\文件夹名称(如:127.0.0.1\\c$\\image)拷贝了image文件夹下面的所有文件,但是如果远程机器有密码的话要先在本机先输入远程的目标地址然后 ...
- (转)MyBatis框架的学习(六)——MyBatis整合Spring
http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...