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实现在字符串中查找子字符串的方法
Jul 11 Python
Python增量循环删除MySQL表数据的方法
Sep 23 Python
python 调用win32pai 操作cmd的方法
May 28 Python
Python 闭包的使用方法
Sep 07 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
Django框架封装外部函数示例
May 28 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
基于Pytorch SSD模型分析
Feb 18 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
python获取百度热榜链接的实例方法
Aug 25 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封装的Twitter访问类实例
2015/07/18 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
JS 控件事件小结
2012/10/31 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
Python中的列表生成式与生成器学习教程
2016/03/13 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
Django REST framework 如何实现内置访问频率控制
2019/07/23 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
python yield和Generator函数用法详解
2020/02/10 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
python中数据库like模糊查询方式
2020/03/02 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
Python存储读取HDF5文件代码解析
2020/11/25 Python
html5教程实现Photoshop渐变色效果
2013/12/04 HTML / CSS
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
艺术设计专业个人求职信
2013/09/21 职场文书
物业总经理岗位职责
2014/02/28 职场文书
租房协议书范本
2014/04/09 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
离婚协议书样本
2015/01/26 职场文书
企业培训简报范文
2015/07/20 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP