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批量添加zabbix Screens的两个脚本分享
Jan 16 Python
python 中文件输入输出及os模块对文件系统的操作方法
Aug 27 Python
python实现银联支付和支付宝支付接入
May 07 Python
Django--权限Permissions的例子
Aug 28 Python
Django获取应用下的所有models的例子
Aug 30 Python
基于Python新建用户并产生随机密码过程解析
Oct 08 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
python实现录屏功能(亲测好用)
Mar 02 Python
Python迭代器Iterable判断方法解析
Mar 16 Python
python3中TQDM库安装及使用详解
Nov 18 Python
Python使用openpyxl复制整张sheet
Mar 24 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延迟静态绑定实例分析
2015/02/08 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
python插入排序算法实例分析
2015/07/03 Python
Python多线程编程之多线程加锁操作示例
2018/09/06 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
python取均匀不重复的随机数方式
2019/11/27 Python
python初步实现word2vec操作
2020/06/09 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
小学课外活动总结
2014/07/09 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
初中英语教学反思范文
2016/02/15 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
python本地文件服务器实例教程
2021/05/02 Python
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL