• python之路——递归函数与实例


    递归函数

    递归函数的定义:

      1、一个函数在内部调用自己,这就叫递归函数

      2、递归的层数在python里面是有限制的

      3、必须要有一个结束条件

    解耦:

    要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数分离。

      1、增强代码的重要性

      2、减少代码变更的相互影响

     

    例一:

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

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

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

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

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

     

     

     

    首先,你是不是问alex的年龄,结果又找到egon、武sir、金鑫,你挨个儿问过去,一直到拿到一个确切的答案,然后顺着这条线再找回来,才得到最终alex的年龄。这个过程已经非常接近递归的思想。我们就来具体的我分析一下,这几个人之间的规律

    4、aelx    46     # egon+2   4   age(4)=age(3)+2   
    
    3、egon   44    #武sir+2         age(3)=age(2)+2
    
    2、武sir    42    # 金鑫+2       age(2)=age(1)+2
    
    1、金鑫     40   #               age(1)==40
    
    
    
    def age(n):
        if n == 1:
            return 40
        else:
            return age(n-1)+2
    
    print(age(4)

    例二

    二分查找:

    l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,69,72,76,82,83,88]

    def search(num,l,start=None,end=None):
        start = start if start else 0
        end = end if end else len(l)-1
        mid = (end-start)//2+start
        if l[mid] > num:
            search(num,l,start,mid-1)
        elif l[mid] < num:
            search(num,l,mid+1,end)
        elif l[mid] == num:
            print(mid,l[mid])     #print(mid)
    search(66,l)
    阶乘(没有返回值)
    def search(num,l,start=None,end=None):
        start = start if start else 0
        end = end if end len(l)-1
        mid = (end-start)//2+start
        if l[mid] > num:
            return search(num,l,start,mid-1)
        elif l[mid] < num
            return search(num,l,mid+1,end)
        elif l[mid] == num
            return mid
    print(search(66,l))
    阶乘(有返回值)

    例三:

     阶乘:n=7     7*6*5*4*3*2*1

    def func(n):
        if n==1:
            return 1
        else:
            return n*func(n-1)
    print(func(7))

     

    例四:

     三级菜单:

    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    
    
    def func(menu):
        while True:
            for k in menu:print(k)
            key = input('>>>')
            elif key =='q':return 'q'
            elif key == 'b':break
                res=func(menu[key])
                if res=='q':return 'q'
    func(menu)
    三级菜单
  • 相关阅读:
    pycharm使用
    python上手之环境搭建
    LDA浅析转
    矩阵按列按行归一化到L2范数的原理和最精简Matlab代码(转)
    (转)Low-Mid-High
    菲波纳数列的特性
    劝狼赋
    asp.net mvc Controller 模式下的 aop
    android for vs (三)visual studio android 发布为 apk
    android for vs (二)visual studio android 开发实例
  • 原文地址:https://www.cnblogs.com/bsxq/p/7485743.html
Copyright © 2020-2023  润新知