加入收藏 | 设为首页 | 会员中心 | 我要投稿 周口站长网 (https://www.0394zz.cn/)- 数据采集、智能营销、经验、云计算、专属主机!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

python中递归函数怎样使用?要注意什么?

发布时间:2022-03-09 14:00:01 所属栏目:语言 来源:互联网
导读:python中递归函数怎样使用?很多新手在使用递归函数时,会出现多种问题,对此,这篇文章就给大家分享一下python中递归函数的用法以及要注意的一些问题,有需要的朋友可以参考。 一、递归函数使用注意点 递归函数一定要编写终止条件,否则将产生无限递归。(
    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 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)

(编辑:周口站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读