Python递归 — — 二分查找、斐波那契数列、三级菜单
一、二分查找
二分查找也称之为折半查找,二分查找要求线性表(存储结构)必须采用顺序存储结构,而且表中元素顺序排列。
二分查找:
1.首先,将表中间位置的元素与被查找元素比较,如果两者相等,查找结束,否则利用中间位置将表分成前、后两个子表。
2.如果中间位置元素<被查找元素,则开始位置 = 中间位置,结束位置 = 表的长度-1
3.如果中间位置元素>被查找元素,则开始位置=0,结束位置=中间位置
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,start= 0,end=None): if end == None:end = len(l) - 1 if start <= end: mid = (end + start) // 2 #12 18 if l[mid] < aim: return func(l,aim,start = mid + 1,end = end) # [42,43,55,56,66,67,69,72,76,82,83,88] elif l[mid] > aim: return func(l,aim,start = start,end = mid - 1) elif l[mid] == aim: return mid else: return None func(l,66)
二、斐波那契数列
斐波那契数列又称黄金分割数列,是指1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... 。这个数列从第3项开始,每一项都得等于前两项的和。
1)比较占内存
def fib(n): if n <= 1: return 1 else: return fib(n - 1) + fib(n - 2)
2)比较推荐
def fib(n,a=0,b=1):
if n == 1 or n == 2:
print(b)
return a + b
else:
print(b)
return fib(n-1,b,a+b)
#1 1 2 3 5 8 13
ret = fib(5)
print(ret)
三、三级菜单
1.遍历一级的key
2.根据输入判断是否key存在
3.如果key存在,递归再打印
4.如果输入是b,只是中断本次函数,返回上层函数
5.如果输入是q,不断的向上返回。
1 area = { 2 '山东省':{'济南市':{'市中区','历下区','天桥区'},'青岛市':{'即墨市','胶州市','平度市'},'菏泽市':{'牡丹区','单县','曹县'}}, 3 '河北省':{'石家庄市':{'高邑县','深泽县','新乐县'},'唐山市':{'乐亭县','迁西县','唐海县'},'秦皇岛市':{'昌黎县','抚宁县','卢龙县'}}, 4 '广东省':{'广州市':{'南沙区','黄浦区','海珠区'},'深圳市':{'罗湖区','南山区','盐田区'},'珠海市':{'香洲区','斗门区','金湾区'}} 5 } 6 7 8 def func(dic): 9 10 while True: 11 for key in dic: 12 print(key) 13 content = input('>>>') 14 if content in dic and dic[content]: 15 ret = func(dic[content]) 16 if ret == 'q':return ret 17 elif content == 'b' or content == 'q': 18 return content 19 20 func(area) 21 print('之后的操作.....')