day 16 递归
递归:
一个函数在内部调用自己
递归的层数在python里是有限的 997/998
解耦:
要完成一个完整的功能,但这个功能的规模要尽量小,
并且和这个功能无关的其他代码应该和这个函数分离。
1.增强代码的重要性。
2.减少代码变更的互相影响。
#写递归函数必须要有一个结束条件
#alex #1 alex egon + 2 n=1 age(1) = age(2) + 2 #2 egon wusir + 2 n=2 age(2) = age(3) +2 #3 wusir 金鑫 + 2 n=3 age(3) = age(4) +2 #4 金鑫 40 n=4 age(4) = 40 def age(n): if n == 4: return 40 return age(n+1)+2 #age(1) #46 # def age(1): # return 46 # # def age(2): # return 44 # # def age(3): # return 42 # # def age(4): # if 4 == 4: # return 40
二分查找
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] def search(num,l,start=None,end=None): start = start if start else 0 end = end if end else len(l) - 1 mid = (end - start)//2 + start if start > end: return None elif l[mid] > num : #17,17 return search(num,l,start,mid-1) elif l[mid] < num: return search(num,l,mid+1,end) elif l[mid] == num: return mid print(search(66,l))
# def search(num,l,start=None,end=None): #66,[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] # start = start if start else 0 #start = 0 # end = end if end else len(l) - 1 #end = 24 # mid = (end - start)//2 + start #mid = 12 # if l[mid] > num : #l[mid] = 41 < 66 # search(num,l,start,mid-1) # elif l[mid] < num: # ret = search(num,l,mid+1,end) #search(66,l,13,24) # return ret # elif l[mid] == num: # return mid, l[mid] # # def search(num,l,start=None,end=None): #66,[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] # start = start if start else 0 #start = 13 # end = end if end else len(l) - 1 #end = 24 # mid = (end - start)//2 + start #mid = 18 # if l[mid] > num : #l[mid] = 67 > 66 # search(num,l,start,mid-1) #search(66,l,13,17) # elif l[mid] < num: # ret = search(num,l,mid+1,end) # return ret # elif l[mid] == num: # return mid, l[mid] # # def search(num,l,start=None,end=None): #66,[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] # start = start if start else 0 #start = 13 # end = end if end else len(l) - 1 #end = 17 # mid = (end - start)//2 + start #mid = 15 # if l[mid] > num : #l[mid] = 56 < 66 # search(num,l,start,mid-1) # elif l[mid] < num: # ret = search(num,l,mid+1,end) #search(66,l,16,17) # return ret # elif l[mid] == num: # return mid, l[mid] # # def search(num,l,start=None,end=None): #66,[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] # start = start if start else 0 #start = 16 # end = end if end else len(l) - 1 #end = 17 # mid = (end - start)//2 + start #mid = 16 # if l[mid] > num : #l[mid] = 56 < 66 # search(num,l,start,mid-1) # elif l[mid] < num: # ret = search(num,l,mid+1,end) #search(66,l,17,17) # return ret # elif l[mid] == num: # return mid, l[mid] # # def search(num,l,start=None,end=None): #66,[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] # start = start if start else 0 #start = 17 # end = end if end else len(l) - 1 #end = 17 # mid = (end - start)//2 + start #mid = 17 # if l[mid] > num : #l[mid] = 66 == 66 # search(num,l,start,mid-1) # elif l[mid] < num: # search(num,l,mid+1,end) # elif l[mid] == num: # return mid, l[mid] #return 17,66
三级菜单
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 "q" Three_Level_Menu(menu)

浙公网安备 33010602011771号