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 ...
随机推荐
- [RHEL] 配置 LVM 卷
[RHEL] 配置 LVM 卷 一.Introduction 基础预览 :LVM 认知与扩容操作 高端实战:Linux系统如何迁移至LVM磁盘 之前转过一篇文章 LVM分区在线扩容 ,其原因是我需要给 ...
- 知名协作工具 Slack 换新 logo 啦!
简评:本文系译文.Slack 在自家 Blog 上解释了新的设计 -- 旧版的 logo 有 11 种颜色,在非白色背景的情况下,logo 不仅难看,而且很容易在多个地方上表现不一致. 新年换新装,S ...
- 关于android分辨率兼容问题
关于手机分辨率相关术语和概念 屏幕尺寸:实际的物理尺寸,屏幕的对角线测量.为了方便,android把所有的屏幕尺寸分为了4个广义的大小:小,正常,大,特大. 屏幕密度:屏幕的物理面积内像素的数量,通常 ...
- day05 --class --home
# -*- coding: utf-8 -*-# @Time : 2018/12/25 14:24# @Author : Endless-cloud# @Site : # @File : day05 ...
- python3的全局变量和局部变量
局部变量 定义在函数体内部的变量称为局部变量 函数的形参也是局部变量 局部变量的作用范围只在声明该局部变量的函数体内 局部变量在函数调用时被创建,在函数调用完成后自动销毁 全局变量 定义在函数体外,模 ...
- POJ 2239
#include<iostream> #include<algorithm> #define MAXN 305 using namespace std; int _m[MAXN ...
- 第一站:CLion安装教程与环境配置
原文来自:http://www.sunmey.cn/thread-129-1-1.html 本人:找了很久才找到的CLion安装教程与环境配置,这里分享给大家~ 这里要说明的一点是CLion是要钱的, ...
- ThreadLocal系列(二)-InheritableThreadLocal的使用及原理解析
ThreadLocal系列之InheritableThreadLocal的使用及原理解析(源码基于java8) 上一篇:ThreadLocal系列(一)-ThreadLocal的使用及原理解析 下一篇 ...
- ator自动生成mybatis配置和类信息
generator自动生成mybatis的xml配置.model.map等信息: 1.下载mybatis-generator-core-1.3.2.jar包. 网址:http://cod ...
- redis linux安装过程回顾
1,官网wget http://download.redis.io/releases/redis-3.2.9.tar.gz 2,解压 tar zxf redis-3.2.9.tar.gz 后进入解压后 ...