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('之后的操作.....')

 

posted @ 2018-02-27 08:41  短毛兔  阅读(357)  评论(2编辑  收藏  举报