—super—

博客园 首页 新随笔 联系 订阅 管理

递归函数本质:

函数内部调用自身

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

递归的默认深度——998

修改递归深度

import sys
print(sys.setrecursionlimit(100000))

 

三级菜单递归实现

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

def threeM(menu):
    for i in menu:
        print(i)
    n = input(">>>")
    if n in menu:
        for key in menu[n]:
            print(key)
        menu = menu[n]
        return threeM(menu)
threeM(menu)

二分法递归实现

l = [1,2,3,5,13,14,15,17,18,19,25,26,28,29,35,38,48,54,59,68,69,78,79,85,98,114,115]
def find(l,aim,start=0,end=len(l)-1)):
    mid = (start+end)//2
    if not l[start:end + 1]:
        return
    if l[mid]>aim:
        return find(l,aim,start,mid-1)
    elif l[mid]<aim:
        return find(l, aim,mid+1,end)
    else:
        return mid
print(find(l,114)
View Code

 

posted on 2017-07-31 15:42  —super—  阅读(183)  评论(0编辑  收藏  举报