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

    一、递归 函数

       为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性

         在函数中能用return的不要print

    1、递归的最大深度997

    def foo(n):
        print(n)
        n+=1
        foo(n)
    foo(1)
    递归的最大深度

    2、修改递归的最大深度

        由此我们可以看出,未报错之前能看到的最大数字就是997.

     当然了,997是python为了我们程序的内存优化所设定的一个默认值,

     我们当然还可以通过一些手段去修改它:

    import sys
    sys.setrecursionlimit(2000)
    n=0
    def func():
        global n
        n+=1
        print(n)
        func()
    func()
    # 1997
    修改递归的最大深度

     3、递归的例子

    例一:

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

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

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

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

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

    def age(n):
        if n==4:
            return 40
        else:
            return age(n+1)+2
    print(age(1))
    #46
    年龄的递归

    详细解析步骤:

    4、总结:

       在一个函数里面调用自己,默认的递归最大限度是1000(不要修改递归的最大限度)

       往往递归都是和循环挂在一起的,人理解循环,神理解递归

     二、二分查找算法

    def find_2(l,aim,start=0,end=None):
        if end==None:end=len(l)-1
        if start<=end:
            mid=(end-start)//2+start
            if l[mid]>aim:
                ret=find_2(l,aim,start,mid-1)
                return ret
            elif l[mid]<aim:
                ret=find_2(l,aim,mid+1,end)
                return ret
            else:
                return aim,mid
        else:
            print("找不到这个值")
    l=[2,3,4,5,6,7,8,9,10,11,12,13,14,15]
    print(find_2(l,6))
    二分查找算法

     

    例题:

    1、阶乘的算法 4*3*2*1

    def f(n):  
        if n==1:
            return 1
        else:
            return n*f(n-1)
    print(f(4))
    阶乘的算法

    2、斐波那契数列

    # 1,1,2,3,4,5,8,13...
    # n=10
    def fib(n):
        if n==1 or n==2:
            return 1
        else:
            return fib(n-1)+fib(n-2)
    print(fib(10))
    斐波那契数列

    3、三级菜单:

    menu = {
        '北京':{
            '海淀':{
                '五道口':{
                    'sogo':{},
                    '网易':{},
                    'google':{}
                },
                '中关村':{
                    '爱奇艺':{},
                    '汽车之家':{},
                    'youku':{},
                },
                '上地':{
                    '百度':{},
                },
            },
            '昌平':{
                '沙河':{
                    '汇德商厦老男孩':{},
                    '北航':{},
                },
                '天通苑':{},
                '回龙观':{},
            },
            '朝阳':{
                 '朝阳大妈' },
            '东城':{},
        },
        '上海':{
            '闵行':{
                "人民广场":{
                    '炸鸡店':{}
                }
            },
            '闸北':{
                '火车战':{
                    '携程':{}
                }
            },
            '浦东':{},
        },
        '山东':{
            '高丽':{}
        },
        }
    def meu_3(menu):
        while True:
            for key in menu:
                print(key)
            choice=input("选择:")
            if choice=="q" or choice=="b":
                return choice
            elif choice in menu and menu[choice]:
                borq=meu_3(menu[choice])
                if borq=="q":
                    return "q"
    meu_3(menu)
    

      

  • 相关阅读:
    升级到`Google-Mobile-Ads-SDK(->7.68)`,导出Unity工程产生的几个BUG以及解决办法
    unity中Asset Store下载的资源保存位置
    Maven打包报错 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    C# ISharpZipLib 压缩/解压缩zip文件
    jarsigner.exe 命令行出现乱码的解决办法
    SwiftUI 结构体自动生成可编辑界面
    .Net Mvc ActionFilterAttribute的OnActionExecuted中获取请求参数信息
    .netcore Attribute特性使用 TypeFilter传参
    vue router.app.$store undefined
    js 判断点击是否是某个div下的dom
  • 原文地址:https://www.cnblogs.com/number1994/p/7995111.html
Copyright © 2011-2022 走看看