Python递归 — — 二分查找、斐波那契数列、三级菜单

时间:2024-04-02 13:38:02

一、二分查找

二分查找也称之为折半查找,二分查找要求线性表(存储结构)必须采用顺序存储结构,而且表中元素顺序排列。

二分查找:

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,不断的向上返回。

 area = {
'山东省':{'济南市':{'市中区','历下区','天桥区'},'青岛市':{'即墨市','胶州市','平度市'},'菏泽市':{'牡丹区','单县','曹县'}},
'河北省':{'石家庄市':{'高邑县','深泽县','新乐县'},'唐山市':{'乐亭县','迁西县','唐海县'},'秦皇岛市':{'昌黎县','抚宁县','卢龙县'}},
'广东省':{'广州市':{'南沙区','黄浦区','海珠区'},'深圳市':{'罗湖区','南山区','盐田区'},'珠海市':{'香洲区','斗门区','金湾区'}}
} def func(dic): while True:
for key in dic:
print(key)
content = input('>>>')
if content in dic and dic[content]:
ret = func(dic[content])
if ret == 'q':return ret
elif content == 'b' or content == 'q':
return content func(area)
print('之后的操作.....')