您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python基础学习之递归函数知识总结

51自学网 2021-10-30 22:37:31
  python
这篇教程python基础学习之递归函数知识总结写得很实用,希望能帮到您。

一、递归函数使用注意点

递归函数一定要编写终止条件,否则将产生无限递归。(死循环)

二、递归的效率问题

  • 递归效率不高,递归层次过多会导致栈溢出。
  • 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装饰递归函数

在这里插入图片描述
在这里插入图片描述 

六、递归函数使用示例

递归函数示例一:

# 18 20 22 24def age(n):    if n == 1:        return 18    else:        return age(n-1) + 2print(age(1)) # 输出:18print(age(2)) # 输出:20print(age(3)) # 输出:22print(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递归函数内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


TensorFlow的自动求导原理分析
使用tensorflow 实现反向传播求导
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。