• 函数递归


    初识递归

    递归的定义:在一个函数里,再次调用这个函数本身,而这种使用函数的方法就叫递归。

    二递归的最大深度----997

    为了使递归函数不成为死函数,强制性的规定范围997

    .......测试最大递归深度

    def fo(n)
        print((n)
        n +=1
        fo(n)
    fo(1)
    View Code

    .......修改最大递归深度

    import sys
    print(sys.setrecursionlimit(100000))
    View Code

    例一:

    现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。

    你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。

    你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。

    那你问金鑫,金鑫告诉你,他40了。。。

    这个时候你是不是就知道了?alex多大?

    1 金鑫   40
    2 武sir   42
    3 egon   44
    4 alex    46

    分析

    age(4) = age(3) + 2 
    age(3) = age(2) + 2
    age(2) = age(1) + 2
    age(1) = 40

    递归

    def age(n):
        if n == 1:
            return 40
        else:
            return age(n-1)+2
    
    print(age(4))

    递归函数与三级菜单

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

    递归函数实现三级菜单

    def threeLM(dic):
         while True:
             for k in dic:print(k)
             key = input('input>>').strip()
             if key == 'b' or key == 'q':return key
             elif key in dic.keys() and dic[key]:
                 ret = threeLM(dic[key])
                if ret == 'q': return 'q'
            elif (not dic.get(key)) or (not dic[key]) :
                 continue
     
     threeLM(menu)
    View Code

    从列表l中找到66

    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]
    
    i = 0
    for num in l:
        if num == 66:
            print(i)
        i+=1
    View Code

    用二分法查找法简单的

     = [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]
    
    def func(l,aim):
        mid = (len(l)-1)//2
        if l:
            if aim > l[mid]:
                func(l[mid+1:],aim)
            elif aim < l[mid]:
                func(l[:mid],aim)
            elif aim == l[mid]:
                print("bingo",mid)
        else:
            print('找不到')
    func(l,66)
    func(l,6)
    View Code

    升级版二分法

    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
  • 相关阅读:
    Alchemy解决方案使得大型主机应用程序能在Windows Azure上运行
    Hello China操作系统微博:http://weibo.com/2196920292
    GDI+ 学习记录(12): 矩形 Rectangle、Rectangles
    GDI+ 学习记录(6): 使用画刷建立画笔
    GDI+ 学习记录(8): 阴影画刷 HatchBrush
    GDI+ 学习记录(5): 复合画笔
    GDI+ 学习记录(11): 路径渐变画刷 PathGradientBrush
    GDI+ 学习记录(7): 实心画刷 SolidBrush
    GDI+ 学习记录(4): 画笔对齐
    GDI+ 学习记录(13): 弧线 Arc
  • 原文地址:https://www.cnblogs.com/wanghaohao/p/7263475.html
Copyright © 2020-2023  润新知