1.递归:

在函数内,调用自己。  (技巧: 每次调用时,函数前面需加上return,这样返回值就可以一层一层 的返回去)

#def age(n):
#    if n == 1:
#        return 40
#    else:
#        return age(n-1)+2#print(age(4))

 

2.结束递归:

当遇到return时,递归结束

3.递归解决的问题就是通过参数来控制每一次调用缩小计算的规模

4.递归适合的场景:数据的规模在减小,但是解决问题的思路没有改变

5.例题:三级菜单

menu = {
#     '北京': {
#         '海淀': {
#             '五道口': {
#                 'soho': {},
#                 '网易': {},
#                 'google': {}
#             },
#             '中关村': {
#                 '爱奇艺': {},
#                 '汽车之家': {},
#                 'youku': {},
#             },
#             '上地': {
#                 '百度': {},
#             },
#         },
#         '昌平': {
#             '沙河': {
#                 '老男孩': {},
#                 '北航': {},
#             },
#             '天通苑': {},
#             '回龙观': {},
#         },
#         '朝阳': {},
#         '东城': {},
#     },
#     '上海': {
#         '闵行': {
#             "人民广场": {
#                 '炸鸡店': {}
#             }
#         },
#         '闸北': {
#             '火车战': {
#                 '携程': {}
#             }
#         },
#         '浦东': {},
#     },
#     '山东': {},
# }
# def threeLM(dic):
#     while True:
#         for k in dic:print(k)
#         key = input('input>>').strip()
#         if key == 'b' or key == 'q':return key
#         elif key in dic.keys() and dic[key]:
#             ret = threeLM(dic[key])
#             if ret == 'q': return 'q'
#         elif (not dic.get(key)) or (not dic[key]) :
#             continue
# 
# threeLM(menu)

 

6.例题:二分法

# def func(l, aim,start = 0,end = len(l)-1 ):
#     mid = (start+end)//2
#     if not l[start:end+1]:
#         return
#     elif aim > l[mid]:
#         return func(l,aim,mid+1,end)
#     elif aim < l[mid]:
#         return func(l,aim,start,mid-1)
#     elif aim == l[mid]:
#         print("bingo")
#         return mid
# 
# index = func(l,68)
# print(index)