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不规范的日期字符串处理类
Jun 10 Python
Python之eval()函数危险性浅析
Jul 03 Python
Windows8下安装Python的BeautifulSoup
Jan 22 Python
python uuid模块使用实例
Apr 08 Python
python文件操作相关知识点总结整理
Feb 22 Python
pycharm远程调试openstack代码
Nov 21 Python
分析Python中解析构建数据知识
Jan 20 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
详细分析Python可变对象和不可变对象
Jul 09 Python
Python极值整数的边界探讨分析
Sep 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
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
PHP读取目录下所有文件的代码
2008/01/07 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
Element Tooltip 文字提示的使用示例
2020/07/26 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
Python简单日志处理类分享
2015/02/14 Python
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
2017/06/09 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
python如何判断IP地址合法性
2020/04/05 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
精神文明单位申报材料
2014/05/02 职场文书
教师工作总结范文2014
2014/11/10 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL