• 递归函数


    一,初识递归

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

    #功能解耦:
    #为什么要有函数:提高代码可读性,避免重复的代码,提高代码的复用性
    #在函数中能return的不要print
    递归函数示例

    def foo(n): print(n) n += 1 foo(n) foo(1)

    递归函数如果不受到外力的阻止会一直执行下去。但是每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997。

    修改最大递归深度

    import sys
    print(sys.getrecursionlimit())

    几种常见递归函数的例子

    “alex的年龄”

    例一:

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

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

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

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

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

    
    
    def age(n):
        if n == 4:
            return 40
        return age(n+1)+2
    
    print(age(1))    #46
    
    

    阶乘

    复制代码
    def f(n):
    if n == 1:
    return 1
    else:
    return n*f(n-1)

    print(f(9))    #362880 
    复制代码

    斐波那契数列

    复制代码
    1,1,2,3,5,8,13....
    n = 10
    f(10) = f(8)+f(9)
    def fib(n):
        if n == 1 or n == 2:
            return 1
        return fib(n-1)+fib(n-2)
    
    print(fib(100))
    复制代码

    二分查找算法

    复制代码
    def find_2(l,aim,start=0,end=None):  #[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]
        if end == None:end = len(l) - 1  #start = 0,end = 24
        if start <= end:
            mid = (end-start) // 2  + start  #mid = 12
            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)     #find_2(l,58,13,24)
                return ret
            else:
                return aim,mid
        else:
            print('找不到这个值')
    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]
    print(find_2(l,17))
    复制代码

    三级菜单

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

    def menu_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]: #北京 in menu borq = menu_3(menu[choice]) if borq == 'q': return 'q' menu_3(menu)
    复制代码
  • 相关阅读:
    MongoDB+Lucence.net
    hubble+sqlserver
    C# 设计模式 1 接口模式 1.1 适配器模式 IT
    SQLServer2005 中 XML类型方法中 XQuery中变量的参数化匆忙整理 IT
    DoNET 类库设计准则01 名称规则 IT
    GMRES在matlab中的描述
    矩阵良态与病态
    调试vc++的一点感悟
    基于GramSchmidt正交法的广义极小残量法(GMRES)
    VC6 vs2003 vs2005 使用技巧(转)
  • 原文地址:https://www.cnblogs.com/xyhh/p/10833606.html
Copyright © 2020-2023  润新知