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解析XML的几种常见方法的介绍
Apr 09 Python
老生常谈Python基础之字符编码
Jun 14 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
python微信好友数据分析详解
Nov 19 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
基于python实现百度翻译功能
May 09 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
django 模型字段设置默认值代码
Jul 15 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
常用表单验证类,有了这个,一般的验证就都齐了。
2006/12/06 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
layui表格实现代码
2017/05/20 Javascript
JavaScript你不知道的一些数组方法
2017/08/18 Javascript
详解react-redux插件入门
2018/04/19 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
2020/06/01 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
Python open()文件处理使用介绍
2014/11/30 Python
简单理解Python中基于生成器的状态机
2015/04/13 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python之两种模式的生产者消费者模型详解
2018/10/26 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
pandas DataFrame运算的实现
2020/06/14 Python
探讨HTML5移动开发的几大特性(必看)
2015/12/30 HTML / CSS
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
2014年租房协议书范本
2014/10/30 职场文书
整改通知书
2015/04/20 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
python热力图实现的完整实例
2022/06/25 Python