• 递归函数


    初始递归:在函数中调用自身函数

                               最大的递归深度默认是997/998-----是python从内存角度出发做的限制

    def story():
        print('从前有座山')
        story()
        print(111)
    
    story()

    你会发现它会无限循环下去,永远不会打印111,并且后面会报错

    RecursionError: maximum recursion depth exceeded while calling a Python object
    递归的错误,超过了递归的最大深度

    但是我们可以改变递归深度,来看一下

    import sys
    sys.setrecursionlimit(1000000)
    n = 0
    def story():
        global n
        n += 1
        print(n)
        story()
    story()
    改变递归深度

    我们也发现了一个问题:如果递归次数太多,就不适合用递归解决问题

    递归的缺点:占内存

    递归的优点:会让代码变简单

    下面我们来看一道例题:

    alex 多大       n = 1   age(1) = age(2)+2 = age(n+1) + 2
    alex比egon大两岁
    egon多大? n = 2 age(2) = age(3) + 2 = age(n+1) +2
    egon比wusir大两岁
    wusir多大 n = 3 age(3) = age(4) + 2 = age(n+1) +2
    wusir比金老板大两岁
    金老板多大?
    金老板40了 n = 4 age(4) = 40

    就是算Alex多大了?

    用递归是怎么写的呢?
    def age(n):
        if n == 4:
            return 40
        elif n >0 and n < 4:
            age(n+1) + 2
    
    print(age(1))

    看起来是不是很简单,那你知道它是怎么执行的吗?

    # 教你看递归
    print(age(1))
    
    def age(1):
        if 1 == 4:
            return 40
        elif 1 >0 and 1 < 4:
            return 46
    
    def age(2):
        if 2 == 4:
            return 40
        elif 2 >0 and 2 < 4:
            return 44
    
    def age(3):
        if 3 == 4:
            return 40
        elif 3 >0 and 3 < 4:
            return 42
    
    def age(4):
        if 4 == 4:
            return 40
        elif n >0 and n < 4:
            return age(n+1) + 2
    教你看递归
  • 相关阅读:
    centos编辑文件显示行号
    16.1
    [整理]正睿划水记
    [题解]UVA1519 Dictionary Size
    [题解]CF323C Two permutations
    [题解]CF1527D MEX Tree
    P2216 [HAOI2007]理想的正方形
    CF858D Polycarp's phone book
    ABC214F substrings
    每天一点小知识-20210810
  • 原文地址:https://www.cnblogs.com/gaoya666/p/8242977.html
Copyright © 2020-2023  润新知