python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法
一. 递归函数
如果一个函数在内部调用自身本身,这个函数就是递归函数。
最大递归深度默认是997 -- python从内存角度出发做得限制(而不是程序真的报错),最大深度可以修改
def func(n):
print(n)
func(n+1)
func(1)
查看最大递归深度
‘’‘
改变最大递归深度,根据自身电脑配置,深度各不相同
’‘’
import sys
sys.setrecursionlimit(1000000)
修改最大递归深度
举个例子:
现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。
你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。
你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。
那你问金鑫,金鑫告诉你,他40了。。。
这个时候你是不是就知道了?alex多大?
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 40
分析
def age(n):
if n == 4:
return 40
elif n > 0 and n < 4:
return age(n+1) + 2
print(age(1))
def age(1):
if 1 == 4:
return 40
elif 1 > 0 and 1 < 4:
return age(1+1) + 2 返回给age(1) def age(2):
if 2 == 4:
return 40
elif 2 > 0 and 2 < 4:
return age(2+1) + 2 返回给上一个的age(1+1) def age(3):
if 3 == 4:
return 40
elif 3 > 0 and 3 < 4:
return age(3+1) + 2 返回给上一个的age(2+1) def age(4):
if 4 == 4:
return 40
elif 4 > 0 and 4 < 4:
return age(4+1) + 2 返回给上一个的age(3+1)
代码拆分一个一个分析
小结:
如果递归次数太多,就不适合使用递归来解决问题
递归的缺点:占内存,容易溢出
递归的优点:会让代码变简单,逻辑清晰
二. 初识算法 -- 二分查找算法
什么叫算法?
计算的方法: 人脑复杂,计算机简单
我们学习的算法,都是过去时
要了解基础的算法,才能创造出更好的算法
不是所有的事情都能套用现成的方法解决的
有些时候会用到学过的算法知识来解决新的问题
二分查找算法:必须处理有序的列表
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]
def find(l,aim):
mid_index = len(l) // 2
if l[mid_index] < aim:
new_l = l[mid_index + 1:]
find(new_l,aim)
elif l[mid_index] > aim:
new_l = l[:mid_index]
find(new_l,aim)
else:
print('找到了',mid_index,l[mid_index]) # 下标不对,怎么改?
find(l,66)
基础版
def find(l,aim,start = 0,end = len(l)):
mid_index = (end - start) // 2 + start # 计算中间值
if l[mid_index] < aim:
find(l,aim,start = mid_index + 1,end = end)
elif l[mid_index] > aim:
find(l, aim, start=start, end= mid_index - 1)
else:
print('找到了',mid_index,l[mid_index])
find(l,66) # 找到了 17 66
升级版
有问题:
1. 参数 end
2. 返回值
3. 找不到怎么办?
def find(l,aim,start = 0,end = None):
end = len(l) if end is None else end
mid_index = (end - start) // 2 + start # 计算中间值
if start <= end:
if l[mid_index] < aim:
return find(l,aim,start = mid_index + 1,end = end)
elif l[mid_index] > aim:
return find(l, aim, start=start, end= mid_index - 1)
else:
return mid_index
else:
return '找不到这个值'
完整版
python学习之老男孩python全栈第九期_day017知识点总结——初识递归、算法的更多相关文章
- python学习之老男孩python全栈第九期_day022知识点总结——初识面向对象
一. 面向对象的引入# 人狗大战 def person(name,HP,aggr,sex): person = { 'name':name, # 昵称 'HP':HP, # 生命值 'aggr':ag ...
- python学习之老男孩python全栈第九期_day027知识点总结——反射、类的内置方法
一. 反射 ''' # isinstance class A:pass class B(A):pass a = A() print(isinstance(a,A)) # 判断对象和类的关系 print ...
- python学习之老男孩python全栈第九期_day023知识点总结——类和对象命名空间、组合
一. 类和对象命名空间类里 可以定义两种属性: 1. 静态属性 2. 动态属性 class Course: language = 'Chinese' def __init__(self, teache ...
- python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块
一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...
- python学习之老男孩python全栈第九期_day010知识点总结
def qqxing(l = []): # 可变数据类型 l.append(1) print(l)qqxing() # [1]qqxing([]) # [1]qqxing() # [1, 1]qqxi ...
- python学习之老男孩python全栈第九期_day007知识点总结
基础数据类型汇总 1. str 2. int 3. list 4. bool 5. dict (1) fromkeys Python 字典 fromkeys() 方法用于创建一个新的字典,并以可迭代对 ...
- python学习之老男孩python全栈第九期_day001知识点总结
1. Python2与Python3的区别: Python2:源码不标准,混乱,重复代码太多: Python3:统一标准,去除重复代码. 编码方式: python2的默认编码方式为ASCII码:pyt ...
- python学习之老男孩python全栈第九期_day014知识点总结
# 迭代器和生成器# 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的# 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in dir ...
- python学习之老男孩python全栈第九期_day016知识点总结
'''数据类型:intbool... 数据结构:dict (python独有的)listtuple (pytho独有的)setstr''' # reverse() 反转l = [1,2,3,4,5]l ...
随机推荐
- MongoDB健壮集群——用副本集做分片
1. MongoDB分片+副本集 健壮的集群方案 多个配置服务器 多个mongos服务器 每个片都是副本集 正确设置w 架构图 说明: 1. 此实验环境在一台机器上通过不同port和dbp ...
- java使用Redis2--保存对象
Redis中并没有提供set(String key, Object obj)的方法,但提供了set(final byte[] key, final byte[] value) 的方法,可以通过把对象转 ...
- gitlab的简单使用
mkdir folder //创建文件夹 cd folder/ git clone git连接 git status //git当前的状态 ls //当前目录下的所有文件 cd gitFolder 进 ...
- 10分钟教你用Python打造微信天气预报机器人
01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...
- django在model中添加字段报错
在以下类中添加 description 字段后, class Colors(models.Model): colors = models.CharField(u'颜色', max_length=10) ...
- windows jenkins 卸载
如果下载的是war包,先在任务管理器上停止jenkins的服务,再删除jenkins整个文件
- docker pull 私有镜像
错误演示 [root@CentOS7 jdk8]# curl http://10.20.2.29:5000/v2/_catalog {"repositories":["d ...
- Mac下常用快捷键(转)
前提,先熟读键盘快捷键符号:http://www.cnblogs.com/EasonJim/p/6350075.html 基本操作: Command-Z 撤销 Command-X 剪切 Command ...
- WCF系列教程之WCF中的会话
本文参考自http://www.cnblogs.com/wangweimutou/p/4516224.html,纯属读书笔记,加深记忆 一.WCF会话简介 1.在WCF应用程序中,回话将一组消息相互关 ...
- 判断checkbox是否被选中
jquery判断checked的三种方法: .attr('checked): //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false .prop( ...