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实现检测服务器是否可以ping通的2种方法
Jan 01 Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 Python
CentOS6.5设置Django开发环境
Oct 13 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
Feb 23 Python
对python中的for循环和range内置函数详解
Apr 17 Python
浅谈numpy数组中冒号和负号的含义
Apr 18 Python
利用pandas将numpy数组导出生成excel的实例
Jun 14 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
详解Python装饰器
Mar 25 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
python-for x in range的用法(注意要点、细节)
May 10 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
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
TP5多入口设置实例讲解
2020/12/15 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
python如何读取bin文件并下发串口
2019/07/05 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
HTML5 Video标签的属性、方法和事件汇总介绍
2015/04/24 HTML / CSS
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
运动会通讯稿400字
2014/01/28 职场文书
八年级语文教学反思
2014/02/11 职场文书
致800米运动员广播稿
2014/02/16 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
职位说明书范文
2014/05/07 职场文书
解除财产保全担保书
2014/05/20 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
创先争优宣传标语
2014/10/08 职场文书
财务人员个人工作总结
2015/02/27 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis