定义:在调用一个函数的过程中直接或间接的调用该函数本身,称之为递归调用。递归调用最多能调用999层。
递归分为两个重要的阶段: 递推+回溯
- 递推:函数不断减少问题规模直至最终的终止条件。
- 回溯:拿到最终明确的值后,返回给上次调用进行处理,直至初始层。
递归函数定义
# 求10!
def jc(n):
if(n==1): # 指定递归的终止条件
return n
return n * jc(n-1) # 递归调用
print(jc(10))
注意:
- 递归调用必须有一个明确的结束条件
- 进入下一次递归时,问题的规模必须降低
递归伪代码
def sum(a):
if(a == 1):
return a
return a + sum(a - 1)
print(sum(100))
'''
100+sum(99)
100+99+sum(98)
100+99+98+sum(97)
....
100 + 99 + 98 + ....+ 1
'''
'''
写出下列递归函数的伪代码:
'''
d = {"name":"leiyh","sex":"男","age":"18","人物信息":['leiyh','男',18],"元组":(0,1,2,3,4)}
'''
第一次遍历:
search("leiyh")
search("男")
search("18")
search(['leiyh','男',18])
第二次遍历:
第二次遍历的是人物信息字段下的数组
search("leiyh")
search("男")
search(18)
'''
def search(d):
# 判断是否是字典,满足遍历
if isinstance(d,dict):
# 遍历获取key: 'name', 'sex', 'age', '人物信息' 用key值遍历获取value
for key in d:
# 每次遍历之后都会重新调用search()函数对里层的value重新判断是否是字典或者数组
search(d[key])
# if条件不满足,就判断d是否是数组
elif(isinstance(d,list)):
# 遍历获取d字典所有key
for i in d:
# 引用key 重新调用search()函数 重新判断d字典属性 d字典第二次判断的key是:人物信息
search(i)
# 判断是否是元组,满足获取该元组里面所有value
elif(isinstance(d,tuple)):
for i in d:
# 递归自调用遍历
search(i)
# 直到上述条件都不满足输出打印d字典
else:
print(d)
search(d)
网友评论