python学习笔记 | 递归思想
1、引子
大师 L. Peter Deutsch 说过:
To Iterate is Human, to Recurse, Divine.
中文译为:人理解迭代,神理解递归
2、什么是递归
- 简单理解:在一个函数中调用自身
- 更多内容:https://www.zhihu.com/question/20507130/answer/15551917
- 例:
def fun():
print("dd")
fun()
fun()
3、缺点
- 占内存
RecursionError: maximum recursion depth exceeded while decoding a JSON array from a unicode string
递归错误:超过递归的最大深度(不大于1000)
错误原因:python从内存角度出发做的限制
修改自身最大深度:
import sys
sys.setrecursionlimit(10000)#设置最大深度10000
ps:如果递归次数太多,就不适合使用递归来解决问题(太占内存)
4、优点
- 代码更简练
- b格更高
5、应用
- 二分查找算法
def find(list,aim):
mid_index = len(list) // 2
print(list[mid_index])
if list[mid_index] < aim:
find(list[mid_index +1:] ,aim)
elif list[mid_index] > aim:
find(list[:mid_index] ,aim)
else:
print('找到了',mid_index,list[mid_index])
list=[1,2,3,4,5,6,7,8,9,10]
find(list,7)优化:
def find2(list,aim,start=0,end=None):#优化二分查找
end = len(list) if end == None else end
mid_index=(end-start) // 2 + start
print(mid_index)
if list[mid_index] < aim:
find2(list,aim,start=mid_index+1,end=end)
elif list[mid_index] > aim:
find2(list,aim,start=start,end=mid_index-1)
else:
print('找到了', mid_index, list[mid_index])
list=[1,2,3,4,5,6,7,8,9,10]
erfind2(list,7)
python学习笔记 | 递归思想的更多相关文章
- Python学习笔记———递归遍历多层目录
import os #得到当前目录下所有的文件 def getALLDir(path,sp = ""): filesList = os.listdir(path) #处理每一个文件 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记(八)
Python学习笔记(八): 复习回顾 递归函数 内置函数 1. 复习回顾 1. 深浅拷贝 2. 集合 应用: 去重 关系操作:交集,并集,差集,对称差集 操作: 定义 s1 = set('alvin ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
- Python学习笔记,day5
Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...
- Deep learning with Python 学习笔记(11)
总结 机器学习(machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序[即模型(model)].将数据转换为程序的这个过程叫作学习(learning) 深 ...
随机推荐
- 别再说你不懂什么是API了
API 全称 Application Programming Interface, 即应用程序编程接口. 看到这里,急性子的小白同学马上就憋不住了:这不管是英文还是中文我每个字都懂啊,只是凑一块就不知 ...
- Vue--子组件相互传参
引用了element做按钮组件 父组件 创建子组件公用的空vue变量,为pubVue,并传给需要互相传参/互相调用方法的两个子组件 <template> <div> <b ...
- js获取url参数、图片转本地base64跨域问题
获取url参数是经常需要用的一个方法,url上的参数可以让我们的程序执行更灵活. 图片转本地也是很实用的,因为海报合成通常只支持本地. 下面我们来看看这些功能的实现: 获取所有参数,采用split拆分 ...
- STL——容器(Set & multiset)的查找
1. set.find(elem); //查找elem元素,返回指向elem元素的迭代器. 1 #include <iostream> 2 #include <set> 3 4 ...
- 00-JAVA语法基础
1. 原码为数的二进制数,反码是将其二进制数每一位按位取反.补码则不同,正数的补码是其原码本身,负数的补码是其除符号位以外其他每一位按位取反再加一,符号位不变. int a=100; a=a>& ...
- Android studio使用OKGO的POST请求访问http失败的解决方法
前几天在旧手机(版本是Android7)上调试一个app,用OKGO的post请求连接服务器登录一直很正常.今天旧手机不在身边,用自己的手机调试,就出现网络请求失败的问题,弹onError()里自己写 ...
- Go语言(1)——程序结构
程序结构 基础部分仅仅列举和其他语言不一样的地方(C语言为例). 声明 Go语言有四个主要声明:var.const.type.func,类似于C语言中的变量,常量,结构体和函数. package ma ...
- Spark-5-如何定位导致数据倾斜的代码
数据倾斜只会发生在shuffle过程中.这里给大家罗列一些常用的并且可能会触发shuffle操作的算子:distinct.groupByKey.reduceByKey.aggregateByKey.j ...
- 网站开发学习Python实现-Django学习-总结(6.1.2)
@ 目录 1.MVT 2.模型 3.视图 4.模板 5.常用的命令 6.pycharm创建django工程 关于作者 1.MVT 项目结构如下,其中项目同名文件夹为配置文件 每一个项目有多个应用(未考 ...
- DRF比Django的认证和权限高在哪里
Django可以用LoginRequiredMixin和PermissionRequiredMixin给类视图添加认证和权限,DRF做了高级封装,提供了更简洁的实现方式.我们通过继续学习官网教程来进行 ...