Day12:递归函数

一、解耦和递归

  - 解耦  - 做一个完整的功能,应该尽可能的减小它的规模,让和这个功能无关的代码和函数与其分离。

    - 增强代码的重用性

    - 减少代码变更的相互影响

  -递归  

    - 一个函数在内部调用它自己

    - 递归的层数在python里是有限制的

二、递归实例

  - 阶乘

def func(n):
    if n == 1:
        return 1
    else:
        return n*func(n-1)

ret = func(7)
print(ret)

  - 二分法查找

def func(num,l,start = None,end = None):    #设置默认值,None
    start = start if start else 0
    end = end if end else len(l)-1      #如果start,end有值,则赋为此值,否则值为0,len(l)-1
    mid = (end - start) // 2 + start
    if start > end:
        return
    elif num > l[mid]:
        return func(num,l,mid+1,end)    #如果要找的值大于中间值,则start为中间值加1,end仍为None
    elif num < l[mid]:
        return func(num,l,start,mid-1)  #如果要找的值小于中间值,start仍为None,end为中间值减1
    elif num == l[mid]:
        return mid
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]
print(func(66,l))

  - 三级菜单

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}

def three_level_menu(menu):
    while True:
        for k in menu:
            print(k)
        key = input('>>>')
        if key == 'q':
            return 'q'
        elif key == 'b':
            break
        elif key in menu:
            ret = three_level_menu(menu[key])
            if ret == 'q':
                return ret
print(three_level_menu(menu))

 

posted @ 2017-09-07 15:38  世界辣么大  阅读(49)  评论(0)    收藏  举报