函数递归
1.递归概念
# 函数在调用阶段直接或间接的又调用自身 1.直接调用本身 def func(n): print('from func',n) func(n+1) func(1) 2.间接调用本身 def index(): print('from index') login() def login(): print('from login') index() login()
2.递归模块
import sys sys.getrecursionlimit() # 查看递归的最大深度,显示1000,不是很精确,函数递归默认最大997、998 sys.setrecursionlimit(2000) #修改默认递归最大深度,传递数字必须大于最大值,但是没什么意思,函数不应该无限制的递归下去
3.递归的两个阶段
1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降,直到有一个最终的结束条件 2.递推:一次次往回推导的过程
#例题: age(5)比age(4)大2,直到age(1)=18,求age(5)
def age(n): if n == 1: # 递归必须要有结束条件 return 18 return age(n-1) + 2 #每一个函数都有返回值,只是一直在往下传递,直到遇到age1停止传递,开始往回返回 res = age(5) print(res)
4.递归应用
k = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]] 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)1.for循环可以么?
2.利用函数递归
递归函数不用考虑循环的次数 只需要把握结束的条件即可

k = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]] 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点) for i in k: 推导思路 if type(i) is int: print(i) else: for item in i: if type(item) is int: print(item) else: for j in item: if type(item) is int: print(item) else: ... # 递归函数不要考虑循环的次数 只需要把握结束的条件即可 def get_num(l): for i in l: if type(i) is int: print(i) else: get_num(i) # get_num(l)