zoukankan      html  css  js  c++  java
  • python递归函数

    python递归函数

    初识递归

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

    现在我们已经大概知道刚刚讲的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
    

  • 相关阅读:
    springboot+mybatisplus使用xml找不到mapper的解决办法
    PDF转换成Word文档
    Mybatis-Plus增删改查
    Redis 常用命令
    Java 获取两个List<String>中不同的数据
    controller 返回界面 中文乱码
    Navicat已经成功连接,密码忘记的解决方案
    List数组指定切割
    xml字符串转换成Map
    Java 前一个月的最后一天日期计算
  • 原文地址:https://www.cnblogs.com/pankypan/p/11191004.html
Copyright © 2011-2022 走看看