1、引子

   大师 L. Peter Deutsch 说过:

To Iterate is Human, to Recurse, Divine.

中文译为:人理解迭代,神理解递归

2、什么是递归

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学习笔记 | 递归思想的更多相关文章

  1. Python学习笔记———递归遍历多层目录

    import os #得到当前目录下所有的文件 def getALLDir(path,sp = ""): filesList = os.listdir(path) #处理每一个文件 ...

  2. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  3. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  4. Python学习笔记基础篇——总览

    Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...

  5. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  6. Python学习笔记(八)

    Python学习笔记(八): 复习回顾 递归函数 内置函数 1. 复习回顾 1. 深浅拷贝 2. 集合 应用: 去重 关系操作:交集,并集,差集,对称差集 操作: 定义 s1 = set('alvin ...

  7. Python学习笔记(六)

    Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...

  8. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

  9. Deep learning with Python 学习笔记(11)

    总结 机器学习(machine learning)是人工智能的一个特殊子领域,其目标是仅靠观察训练数据来自动开发程序[即模型(model)].将数据转换为程序的这个过程叫作学习(learning) 深 ...

随机推荐

  1. mybatis逆向工程运行

    命令: mvn mybatis-generator:generate 项目结构: generatorConfig.xml内容示例 <?xml version="1.0" en ...

  2. Python测试框架unittest

    Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...

  3. 20201205-2 HTML概念与版本

      HTML的基础   HTML称为超文本标记语言,是一种标识性的语言. 它包括一系列标签,通过这些标签可以将网络上的文档格式统一, 使分散的Internet资源连接为一个逻辑整体. HTML文本是由 ...

  4. gnuplot中的一些技巧

    http://blog.csdn.net/bill_chuang/article/details/18215051 一.基础篇: 1.plot命令 基本命令:plot {<ranges>} ...

  5. CentOS6下的ElasticSearch运行步骤

    如何运行ElasticSearch: 1.首先安装jdk1.8版本或以上. 2.下载elasticsearch的压缩包.(我下载的是elasticsearch-6.3.2.tar.gz) 3.使用命令 ...

  6. Git - 简单的使用与Github

    Github: Following the instructions to create repo. Git on Linux(centos): download the latest GIT and ...

  7. Spring Data JPA 整合Spring 第二篇

    主要是在CustomerDao中去写一些代码,在调用Query中去用SQL 例如 public interface CustomerDao extends JpaRepository<Custo ...

  8. 工具-python包-虚拟环境管理(99.4.1)

    @ 目录 1.第一种方法-virtualenv 2.第二种方法-pycharm 关于作者 1.第一种方法-virtualenv 1.安装 pip install virtualenv pip inst ...

  9. Typora+Picgo+Gitee实现上传图片

    下载picgo和node.js 百度网盘地址: 链接:https://pan.baidu.com/s/1QwbXn4vFuDfSFNOnZU5-Jg 取码:efgc 打开picgo,安装gitee-u ...

  10. 微服务 - 服务消费(七)Feign

    介绍 Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web ...