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 def函数的定义、使用及参数传递实现代码
Aug 10 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
Python微信公众号开发平台
Jan 25 Python
django在接受post请求时显示403forbidden实例解析
Jan 25 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
Python实现合并两个列表的方法分析
May 28 Python
python实现代码统计程序
Sep 19 Python
详解numpy矩阵的创建与数据类型
Oct 18 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
python 发送get请求接口详解
Nov 17 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实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
jQuery 技巧小结
2010/04/02 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
canvas时钟效果
2017/02/16 Javascript
vue中的非父子间的通讯问题简单的实例代码
2017/07/19 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python深入学习之闭包
2014/08/31 Python
如何在Python中编写并发程序
2016/02/27 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
python实现文字版扫雷
2020/04/24 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
幼儿园大班教学反思
2016/03/02 职场文书
python爬虫--selenium模块
2021/03/31 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
使用Redis做预定库存缓存功能
2022/04/02 Redis