递归函数
一、递归函数定义
- 什么是递归: 在一个函数里在调用这个函数本身
- 最大递归层数是:997
- 最大递归层数可以修改,建议不要去修改 (如果997层数递归都没解决你的问题那只有两个原因:一、你的代码不适合用递归,二、你的代码太烂~
-
count = 1
def xiake():
global count
print(count)
print('下课')
count+=1
xiake()xiake()
-
二、递归的特性:
- 1、递归函数必须有一个明确的结束条件
- 2、每进入更深一层的递归时,问题规模现对于上一层递归都会减少
- 3、相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输入就是作为后一次的输入)
- 4、递归效率不高,递归层次过多会导致栈溢出
三、递归函数的优缺点
- 递归函数的优点: 定义简单,逻辑清晰,理论上,可以说所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰
- 递归函数的缺点: 使用递归函数需要注意防止栈溢出
四、下面就用实例说明一切
- 递归函数解决嵌套的列表操作
lst = ['a1','a2',['a11','a22',['b11','b22',['ccc','ddd']]]] def look_up(lst): # ['a1','a2',['a11','a22',['b11','b22',['ccc','ddd']]]] for i in lst: if type(i) is list: # ['a11','a22',['b11','b22',['ccc','ddd']]] look_up(i) # lst(['a11','a22',['b11','b22',['ccc','ddd']]]) else: print(i) # 'a1' 'a2' look_up(lst)
- 求l1列表中所有数的和
l1 =[1,[90,80.2],4,[5,6,7,8,[6,3,2]]] # 求列表中所有元素的和 def rec_sum(lst): sum_n = 0 for n in lst: if type(n) is list: ret = rec_sum(n) sum_n += ret elif type(n) is int or type(n) is float: sum_n += n return sum_n ret1= rec_sum(l1) # [1,[90,80.2],4,[[6,3,2],5]] print(ret1) 结果:212.2
- 用递归实现阶乘
def fn(n): # n=3 if n>1: return n * fn(n-1) else: return n ret = fn(10) print(ret) 结果:3628800