zoukankan      html  css  js  c++  java
  • 递归

    递归的定义

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

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

    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

    需要强调的一点是

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

    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)

    思维导图(点击链接

  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/zhww/p/12983969.html
Copyright © 2011-2022 走看看