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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python中引用与复制用法实例分析
Jun 04 Python
Python解析树及树的遍历
Feb 03 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
CentOS7.3编译安装Python3.6.2的方法
Jan 22 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
python中的itertools的使用详解
Jan 13 Python
pytorch 常用线性函数详解
Jan 15 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
Aug 11 Python
Python学习之时间包使用教程详解
Mar 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
vuex Module将 store 分割成模块的操作
2020/12/07 Vue.js
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现发送email的几种常用方法
2014/08/18 Python
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
2017/03/12 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python 处理文件的几种方式
2019/08/23 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
QML用PathView实现轮播图
2020/06/03 Python
浅析Python requests 模块
2020/10/09 Python
总经理岗位职责
2013/11/09 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
毕业答辩开场白范文
2015/05/27 职场文书
超强台风观后感
2015/06/09 职场文书
大学生十八大感想
2015/08/11 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
zabbix配置nginx监控的实现
2022/05/25 Servers
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS