• 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('之后的操作.....')
  • 相关阅读:
    NYOJ-括号配对问题--------待解决,RE
    NYOJ-小猴子下落
    UVA401
    UVA11059
    生成1-N的排列
    C++ STL, next_permutation用法。
    C++ STL, set用法。 待更新zzzzz
    C++ STL, sort用法。
    C++中getline的用法
    TCP系列34—窗口管理&流控—8、缓存自动调整
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8476951.html
Copyright © 2020-2023  润新知