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遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
深入讲解Python编程中的字符串
Oct 14 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
python+pillow绘制矩阵盖尔圆简单实例
Jan 16 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 Python
设置python3为默认python的方法
Oct 31 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
jupyter notebook参数化运行python方式
Apr 10 Python
python 字符串格式化的示例
Sep 21 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调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
php实现json编码的方法
2015/07/30 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
JS 判断代码全收集
2009/04/28 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
vue-router懒加载速度缓慢问题及解决方法
2018/11/25 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
餐饮营销方案
2014/02/23 职场文书
入职担保书怎么写
2014/05/12 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
2015年复活节活动总结
2015/02/27 职场文书
销售开票员岗位职责
2015/04/15 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers