一、递归
- 定义:在函数里面再调用这个函数本身
- 递归的最大深度:理论值1000,具体看个人
#查看自己电脑的递归最大深度的函数def foo(n):print(n)n += 1foo(n)foo(1)
eg1:年龄问题
假设ABCDEF五个人,A问B你多大了 ,B说我比C大2岁,C说我比D大2岁,D说我比E大两岁,最后E说我20
求任意一人的年龄
def age(n):if n == 1:return 20else:return age(n-1)+2print(age(3))
eg2:递归实现三级菜单
menu = {'山东': {'青岛': ['四方', '黄岛', '崂山', '李沧', '城阳'],'济南': ['历城', '槐荫', '高新', '长青', '章丘'],'烟台': ['龙口', '莱山', '牟平', '蓬莱', '招远']},'江苏': {'苏州': ['沧浪', '相城', '平江', '吴中', '昆山'],'南京': ['白下', '秦淮', '浦口', '栖霞', '江宁'],'无锡': ['崇安', '南长', '北塘', '锡山', '江阴']},'浙江': {'杭州': ['西湖', '江干', '下城', '上城', '滨江'],'宁波': ['海曙', '江东', '江北', '镇海', '余姚'],'温州': ['鹿城', '龙湾', '乐清', '瑞安', '永嘉']},'安徽': {'合肥': ['蜀山', '庐阳', '包河', '经开', '新站'],'芜湖': ['镜湖', '鸠江', '无为', '三山', '南陵'],'蚌埠': ['蚌山', '龙子湖', '淮上', '怀远', '固镇']},'广东': {'深圳': ['罗湖', '福田', '南山', '宝安', '布吉'],'广州': ['天河', '珠海', '越秀', '白云', '黄埔'],'东莞': ['莞城', '长安', '虎门', '万江', '大朗']},'山西': {}}import timedef threeLM(dic):while True:for k in dic:print(k)key = input('input>>').strip()if key == 'b' or key == 'q':return keyelif key in dic.keys() and dic[key]:if isinstance(dic[key],list):for i in dic[key]:print(i)print('所有数据已经查询完毕即将返回上级菜单','==================================',sep='\n')time.sleep(3)continueelse:ret = threeLM(dic[key])if ret == 'q': return 'q'else:print('信息暂未录入请重新输入','=====================',sep='\n')time.sleep(2)continuethreeLM(menu)
二、二分查找算法
必须是按序排好的
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 func(l,aim):# mid = (len(l)-1)//2# if l:# if aim > l[mid]:# func(l[mid+1:],aim)# elif aim < l[mid]:# func(l[:mid],aim)# elif aim == l[mid]:# print("找到了",mid)# else:# print('找不到')# func(l,66)# func(l,6)def search(num,l,start=None,end=None):start = start if start else 0end = len(l)-1 if end is None else endmid = (end - start)//2 + startif start > end:return Noneelif l[mid] > num :return search(num,l,start,mid-1)elif l[mid] < num:return search(num,l,mid+1,end)elif l[mid] == num:return midret = search(18,l)print(ret)
