码迷,mamicode.com
首页 > 其他好文 > 详细

递归函数

时间:2019-07-15 20:05:30      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:自己的   函数调用   应用   turn   自己   深度   三级菜单   code   port   

递归函数

初识递归

递归的定义——在一个函数里再调用这个函数本身

现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归


Python递归的最大深度

正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了1000

def recursion_deep(n=1):
    print(n)
    n += 1
    recursion_deep(n)


if __name__ == '__main__':
    recursion_deep()

设置默认递归层数:

import sys
sys.setrecursionlimit(2000)


def recursion_deep(n=1):
    print(n)
    n += 1
    recursion_deep(n)


recursion_deep()


递归应用

三级菜单

menu = {
    '北京': {
        '海淀': {
            '五道口': {
                'soho': {},
                '网易': {},
                'google': {}
            },
            '中关村': {
                '爱奇艺': {},
                '汽车之家': {},
                'youku': {},
            },
            '上地': {
                '百度': {},
            },
        },
        '昌平': {
            '沙河': {
                '老男孩': {},
                '北航': {},
            },
            '天通苑': {},
            '回龙观': {},
        },
        '朝阳': {},
        '东城': {},
    },
    '上海': {
        '闵行': {
            "人民广场": {
                '炸鸡店': {}
            }
        },
        '闸北': {
            '火车战': {
                '携程': {}
            }
        },
        '浦东': {},
    },
    '山东': {},
}
def three_menu(dic):
    while True:
        for k in dic:
            print(k)
        key = input("input>>>").strip()
        if key == 'q' or key == 'b':
            return 'q'
        elif key in dic.keys() and dic[key]:
            ret = three_menu(dic[key])
            if ret == 'q':
                return 'q'


three_menu(menu)

二分查找

def search(num, lst, start=None, end=None):
    start = 0 if start is None else start
    end = len(lst) - 1 if end is None else end
    mid = (end - start) // 2 + start
    if start >= end:
        return None
    elif lst[mid] > num:
        return search(num, lst, start, mid - 1)
    elif lst[mid] < num:
        return search(num, lst, mid + 1, end)
    elif lst[mid] == num:
        return mid


lst = [1, 2, 5, 8, 13, 23, 26, 33, 35, 40]
print(search(22, lst))  # None
print(search(23, lst))  # 5


递归函数

标签:自己的   函数调用   应用   turn   自己   深度   三级菜单   code   port   

原文地址:https://www.cnblogs.com/pankypan/p/11191004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!