zoukankan      html  css  js  c++  java
  • 递归

    1.递归:在函数内调用自己
    2.递归最大的层数限制:997

         证明递归的最大层数是997

    
    
    View Cod

    3.最大层数是python默认的可以修改
    今天学到了一个sys,修改递归最大深度 global
    
    
    View Code

    但是不建议修改
    4.递归解决的问题
    通过参数,来控制每一次调用缩小计算的规模
    5.适合场景
    数据的规模在减小但解决问题的思路并没有变
    6.结束递归的标志:return


    例题: 

      用二分法找66

    l=[2,3,4,5,6,8,10,18,22,56,66,88,99,101,122]
    def find(l,aim):#aim要找的
        mid=len(l)//2#计算中点
        if l[mid]>aim:#判断中间位置
            new_l=l[:mid]
            return find(new_l,aim)
        elif l[mid]<aim:#判断中间位置
            new_l=l[mid+1:]
            return find(new_l,aim)
        else:
            return l[mid]
    
    print(find(l,66))
    View Code

    找到指定数的索引

    l=[10,15,18,21,31,45,56,68,78,79,88,99]
    def func(l, aim,start = 0,end = len(l)-1 ):
        mid = (start+end)//2
        if not l[start:end+1]:
            return
        elif aim > l[mid]:
            return func(l,aim,mid+1,end)
        elif aim < l[mid]:
            return func(l,aim,start,mid-1)
        elif aim == l[mid]:
            print("bingo")
            return mid
    
    index = func(l,68)
    print(index)
    View Code

    递归函数与三级菜单

    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    View Code
     def threeLM(dic):
     2     while True:
     3         for k in dic:print(k)
     4         key = input('input>>').strip()
     5         if key == 'b' or key == 'q':return key
     6         elif key in dic.keys() and dic[key]:
     7             ret = threeLM(dic[key])
     8             if ret == 'q': return 'q'
     9         elif (not dic.get(key)) or (not dic[key]) :
    10             continue
    11 
    12 threeLM(menu)
    View
  • 相关阅读:
    Oracle DataGuard搭建(二)
    Oracle DataGuard搭建(一)
    Linux 安装oracle10g 配置dataguard 介绍和步骤
    Oracle DataGuard数据备份方案详解
    汽车行业的DMS系统 IT不变应万变
    汽车行业DMS系统介绍
    详解UML中的聚合,关联,泛化等关系
    ASP.NET将Session保存到数据库中
    C#快捷键
    Asp.net中使用资源文件实现网站多语言
  • 原文地址:https://www.cnblogs.com/1996-11-01-614lb/p/7265094.html
Copyright © 2011-2022 走看看