Day12:递归函数
一、解耦和递归
- 解耦 - 做一个完整的功能,应该尽可能的减小它的规模,让和这个功能无关的代码和函数与其分离。
- 增强代码的重用性
- 减少代码变更的相互影响
-递归
- 一个函数在内部调用它自己
- 递归的层数在python里是有限制的
二、递归实例
- 阶乘
def func(n): if n == 1: return 1 else: return n*func(n-1) ret = func(7) print(ret)
- 二分法查找
def func(num,l,start = None,end = None): #设置默认值,None start = start if start else 0 end = end if end else len(l)-1 #如果start,end有值,则赋为此值,否则值为0,len(l)-1 mid = (end - start) // 2 + start if start > end: return elif num > l[mid]: return func(num,l,mid+1,end) #如果要找的值大于中间值,则start为中间值加1,end仍为None elif num < l[mid]: return func(num,l,start,mid-1) #如果要找的值小于中间值,start仍为None,end为中间值减1 elif num == l[mid]: return mid l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] print(func(66,l))
- 三级菜单
menu = { '北京': { '海淀': { '五道口': { 'soho': {}, '网易': {}, 'google': {} }, '中关村': { '爱奇艺': {}, '汽车之家': {}, 'youku': {}, }, '上地': { '百度': {}, }, }, '昌平': { '沙河': { '老男孩': {}, '北航': {}, }, '天通苑': {}, '回龙观': {}, }, '朝阳': {}, '东城': {}, }, '上海': { '闵行': { "人民广场": { '炸鸡店': {} } }, '闸北': { '火车战': { '携程': {} } }, '浦东': {}, }, '山东': {}, } def three_level_menu(menu): while True: for k in menu: print(k) key = input('>>>') if key == 'q': return 'q' elif key == 'b': break elif key in menu: ret = three_level_menu(menu[key]) if ret == 'q': return ret print(three_level_menu(menu))

浙公网安备 33010602011771号