04_09、递归函数
一、递归函数
1、关于递归函数
递归函数是直接或间接的调用自己
由此会使函数不间断的调用自己,所以递归一定要有结束条件
默认的递归深度(循环次数)是1000次
递归深度的查看和修改方式
import sys # 引入sys模块
print(sys.getrecursionlimit()) # 查看最大递归深度
# 结果为1000
sys.setrecursionlimit(2000) # 修改最大递归深度
print(sys.getrecursionlimit())
# 结果为2000
2、简单案例
count = 1
def index():
global count
count += 1
print('from index', count)
index()
index()
3、实际应用
# 有5个人,如果A比B大2岁,B比C大2岁,以此类推,现知E18岁,求A的年纪
# 思路:a=b+2 b=c+2 c=d+2 d=e+2 e=18
# 当age=18的时候,循环4次age=age+2
# 或者定义一个函数,让函数返回值依然为该函数名,完成函数递归,代替循环
def age(n): # 定义一个函数
if n == 1:
return 18 # 设置结束条件
return age(n - 1) + 2 # 返回值的名字依次减1,值依次加2
print(age(5)) # 打印出n=5时的结果
4、应用进阶
# 要求把列表内的数值全部拆分出来
l = [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, ]]]]]]]]]]
# 分析:列表是整型+列表额嵌套模式
# 思路:如果是整型,直接打印输出;如果不是整型(也就是列表格式),循环
# 具体方式:定义一个递归函数,如果是整型,直接打印输出
# 如果是列表,递归循环如果
def get_num(l):
for i in l:
if type(i) is int:
print(i)
else:
get_num(i)
get_num(l)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通