• Python正课45 —— 函数的递归调用


    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12565342.html

    一:递归的定义

    函数的递归调用:是函数嵌套调用的一种特殊形式

    具体是指:在调用一个函数的过程当中,又直接或者间接地调用到了本身

    Python对递归调用循环调用的次数有限制,为1000次

    1.调用的例子:

    直接调用本身

    def f1():
        print('是我')
        f1()
    
    f1()
    

    间接调用本身

    def f1():
        print('我是f1')
        f2()
    
    def f2():
        print('我是f12')
        f1()
    
    f1()
    

    2.一段代码的循环运行方案有2种

    方式1:while、for循环

    while True:
        print(111)
        print(222)
        print(333)
    

    方式2:递归循环

    def f1():递归的本质,就是循环
        print(111)
        print(222)
        print(333)
        f1()
    
    f1
    

    二:需要强调的一点是:

    Python没有尾递归优化(了解)

    递归调用不应该无限地调用下去,必须在满足某种条件下,结束递归

    n = 0
    while n < 10:
        print(n)
        n += 1
    
    def func(n):
        if n == 10:
            return
        print(n)
        n += 1
        func(n)
    
    func(0)
    

    三:递归的2个阶段

    1.回溯:一层一层调用下去

    2.递推:满足某种结束条件,结束递归调用,然后一层一层返回

    # age(5) = age(4) + 10
    # age(4) = age(3) + 10
    # age(3) = age(2) + 10
    # age(2) = age(1) + 10
    # age(1) = 18
    
    def age(n):
        if n == 1:
            return 18
    
        return age(n-1) + 10
    
    res = age(5)
    print(res)
    

    四:递归的应用

    l = [1, 2, [3, [4, [5, [6, [7, [8, [9, 10, 11]]]]]]]]
    # l = [1,2,[3,4]]
    def f1(list1):
        for x in list1:
            if type(x) is list:
                # 如果是列表,应该再循环、再判断,即 重新运行本身的代码
                f1(x)
                # for a in x:
                #     if type(a) is list:
                #         pass
                #     else:
                #         print(a)
            else:
                print(x)
    
    f1(l)
    
  • 相关阅读:
    curl命令具体解释
    奇妙的go语言(聊天室的开发)
    python fabric实现远程操作和部署
    未来将是越界的时代
    Impala与Hive的比較
    不用加减乘除做加法
    跟我学系列教程——《13天让你学会Redis》火热报名中
    JavaScript(19)jQuery HTML 获取和设置内容和属性
    springMVC3学习(六)--SimpleFormController
    hdu 4908 BestCoder Sequence
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/12565342.html
Copyright © 2020-2023  润新知