python基础学习之递归函数知识总结


Posted in Python onMay 26, 2021

一、递归函数使用注意点

递归函数一定要编写终止条件,否则将产生无限递归。(死循环)

二、递归的效率问题

  • 递归效率不高,递归层次过多会导致栈溢出。
  • Python中不推荐使用递归。

三、递归函数引入

"""
使用代码循环输出故事:从前有座山,山里有座庙...
"""
# ------------while循环 (暂时忽略死循环)---------------
while True:
    print("从前有座山,山里有座庙...")

# ---------------通过定义一个方法, 在while循环里面调用实现( 暂时忽略死循环)---------------
def func_story():
    print("从前有座山,山里有座庙...")

while True: 
    func_story()

# ---------------使用递归的方法实现循环---------------
def story():
    print("从前有座山,山里有座庙...")
    story()

story()
# 报错:RecursionError: maximum recursion depth exceeded while calling a Python object

四、递归的深度

这里就引申到一个递归的最大深度。

import sys

# 获取最大递归深度
res = sys.getrecursionlimit()
print(res) # 输出:1000

# 递归最大深度:
def func(n):
    print(n)
    n += 1
    func(n)


func(1)  # python 3 打印到998就停止打印了

我们可以设置递归的最大深度。但是能够达到的最大深度,跟电脑配置也有关系:

import sys

# 设置递归的深度
sys.setrecursionlimit(10000)


# 递归最大深度:
def func(n):
    print(n)
    n += 1
    func(n)


func(1)  # python 3 打印到3221就停止打印了

五、通过缓存解决递归限制

通过缓存解决最大递归限制的问题:

  • Python的functools模块中提供了很多高阶函数的操作。
  • lru_cache:缓存功能装饰器,能够缓存相同参数的函数调用结果,可以节约高开销或I/O函数的调用时间。
  • 通过lru_cache装饰递归函数

python基础学习之递归函数知识总结
python基础学习之递归函数知识总结 

六、递归函数使用示例

递归函数示例一:

# 18 20 22 24
def age(n):
    if n == 1:
        return 18
    else:
        return age(n-1) + 2

print(age(1)) # 输出:18
print(age(2)) # 输出:20
print(age(3)) # 输出:22
print(age(4)) # 输出:24

递归函数示例二:打印三级菜单

# 我们有一个这样的三级菜单
menu = {
    "功能测试": {
        "用例管理": {
            "添加用例": {},
            "删除用例": {},
            "复制用例": {}
        },
        "元素管理": {
            "添加元素": {},
            "删除元素": {},
            "复制元素": {}
        },
    },
    "接口测试": {
        "API管理": {
            "添加api": {},
            "删除api": {},
            "复制api": {}
        },
        "环境管理": {
            "添加环境": {},
            "删除环境": {},
            "复制环境": {}
        },
    },
}

def query_menu(menu:dict):
    """
    一级级查询菜单信息
    :return:
    """
    # 用户输入q退出
    while True:
        for k in menu:print(f"当前菜单:{k}")
        key = input(">>>").strip()
        if key == "q": return key
        elif key in menu.keys() and menu[key]:
            res = query_menu(menu[key])
            if res == "q":
                return "q"

query_menu(menu)

输出结果:

python基础学习之递归函数知识总结

到此这篇关于python基础学习之递归函数知识总结的文章就介绍到这了,更多相关python递归函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python中的文本处理
Apr 11 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
django如何连接已存在数据的数据库
Aug 14 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python3实现点餐系统
Jan 24 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
scrapy头部修改的方法详解
Dec 06 Python
TensorFlow的自动求导原理分析
Django分页器的用法你都了解吗
May 26 #Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 #Python
python numpy中multiply与*及matul 的区别说明
May 26 #Python
python文本处理的方案(结巴分词并去除符号)
Django操作cookie的实现
May 26 #Python
pandas中DataFrame检测重复值的实现
You might like
PHP在字符断点处截断文字的实现代码
2011/04/21 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
javascript 写类方式之八
2009/07/05 Javascript
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
javascript全局变量封装模块实现代码
2012/11/28 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
jQuery绑定事件-多种实现方式总结
2016/05/09 Javascript
深入浅析JavaScript中的3DES
2016/08/24 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
小程序实现列表删除功能
2018/10/30 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
python 实现删除文件或文件夹实例详解
2016/12/04 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
美国老牌主机服务商:iPage
2016/07/22 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
工程造价专业大专生求职信
2013/10/06 职场文书
师范应届生教师求职信
2013/11/05 职场文书
绿色城市实施方案
2014/03/19 职场文书
个人合作协议书范本
2014/04/18 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书