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 urlopen()函数 示例分享
Jun 12 Python
深入理解Python中装饰器的用法
Jun 28 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
Python OpenCV获取视频的方法
Feb 28 Python
python 调用有道api接口的方法
Jan 03 Python
django 自定义过滤器的实现
Feb 26 Python
Python用字典构建多级菜单功能
Jul 11 Python
Python3离线安装Requests模块问题
Oct 13 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
python如何将两张图片生成为全景图片
Mar 05 Python
构建高效的python requests长连接池详解
May 02 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 cookies中删除的一般赋值方法
2011/05/07 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
IE6不能修改NAME问题的解决方法
2010/09/03 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
DWZ刷新dialog解决方法
2013/03/03 Javascript
在新窗口打开超链接的方法小结
2013/04/14 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
python连接池实现示例程序
2013/11/26 Python
python实现调用其他python脚本的方法
2014/10/05 Python
Python中格式化format()方法详解
2017/04/01 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
2014年护士长工作总结
2014/11/11 职场文书
2016中学教师读书心得体会
2016/01/13 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
Python机器学习之逻辑回归
2021/05/11 Python