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)
输出结果:
(资源库 www.zyku.net)
原文链接:https://blog.csdn.net/FloraCHY/article/details/117235163
栏 目:Python教程
下一篇:Pytorch 中net.train 和 net.eval的使用说明
本文标题:python基础学习之递归函数知识总结
本文地址:https://www.zyku.net/python/9729.html
您可能感兴趣的文章
- 02-08Python基础之模块相关知识总结
- 02-08Python基础学习之条件控制语句小结
- 01-25Python基础之数据类型知识汇总
- 01-25Python基础之语法错误和异常详解
- 01-25Python基础之logging模块知识总结
- 04-24Python 基础学习教程
- 06-26jquery 显示隐藏input输入框
- 01-13dedecms当前位置导航去掉链接的实现方
- 01-24华为手机导航键开启方法
- 01-11研考精灵-研考精灵应用软件功能介绍
- 12-23HTML <button> 标签
- 02-11Pytho常见的数据可视化库,小白必备
- 09-24抖音群在哪里设置进群门槛
- 01-12dedecms 每个栏目下的文章总数的调用
- 02-28红米note10截图截屏方法
- 09-19iqoo8pro在哪里调节震感程度
- 11-21PHP中实现水仙花的方法
- 01-12Go清理-Go清理应用软件功能介绍
- 04-07一加9修改息屏显示设置方法
- 04-18华为手机开启单手模式设置方法
最近更新
阅读排行
猜你喜欢
- 02-19discuz用户通过邮箱重置密码提示参数
- 12-27百师教育网-百师教育网应用软件功能介
- 09-29realmegtneo2如何设置电量百分比
- 01-16画涯购物-画涯购物应用软件功能介绍
- 01-11小小密码本-小小密码本应用软件功能介
- 11-21mysql修改character_set_server为utf-
- 08-10touchretouch抠图神器保存图片技巧
- 03-12Apache服务器利用.htaccess重写URL实
- 11-24猫耳fm日常任务在哪完成
- 02-28小米音响连接wifi设置方法