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 相关文章推荐
wxPython框架类和面板类的使用实例
Sep 28 Python
Python实例一个类背后发生了什么
Feb 09 Python
Python矩阵常见运算操作实例总结
Sep 29 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
Django项目中model的数据处理以及页面交互方法
May 30 Python
pandas分别写入excel的不同sheet方法
Dec 11 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
python中with用法讲解
Feb 07 Python
python hmac模块验证客户端的合法性
Nov 07 Python
python基础入门之普通操作与函数(三)
Jun 13 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
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
jQuery.each使用详解
2015/07/07 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
vue.js给动态绑定的radio列表做批量编辑的方法
2018/02/28 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
mac 安装python网络请求包requests方法
2018/06/13 Python
Django 路由控制的实现代码
2018/11/08 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
一些Unix笔试题和面试题
2013/01/22 面试题
建筑工程技术应届生求职信
2013/11/17 职场文书
教师推荐信范文
2013/11/24 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
新教师岗前培训方案
2014/06/05 职场文书
团日活动总结报告
2014/06/25 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
公司放假通知怎么写
2015/04/15 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python