zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    [写代码]处理一组lrc歌词文件
    [ubuntu]windows重装以后,恢复grub引导
    [HDOJ1878]欧拉回路
    [写代码]解析自定义数据库文件的思路
    [写代码]wordList——百词斩CLI版
    [HDOJ2544]最短路
    [HDOJ1285] 确定比赛名次
    [HDOJ1232]畅通工程
    [HDOJ2717]Catch That Cow
    jQuery实现点击开关图片切换
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/12565342.html
Copyright © 2011-2022 走看看