zoukankan      html  css  js  c++  java
  • 函数递归

    一 函数递归调用介绍

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

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

      直接调用:

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

      间接调用

    def f1():
        print('===>f1')
        f2()
    
    def f2():
        print('===>f2')
        f1()
    
    f1()

      两种情况下的递归调用都是一个无限循环的过程,但在python对函数的递归调用的深度做了限制,因而并不会像大家所想的那样进入无限循环,会抛出异常

      提示:

    #1. 可以使用sys.getrecursionlimit()去查看递归深度,默认值为1000,虽然可以使用
    sys.setrecursionlimit()去设定该值,但仍受限于主机操作系统栈大小的限制
    
    #2. python不是一门函数式编程语言,无法对递归进行尾递归优化。

      强调:

    # 递归调用不应该无限地调用下去,必须在满足某种条件下结束递归调用
    def f1(n):
        if n == 10:
            return
        print(n)
        n+=1
        f1(n)
    f1(0)

      

    二 回溯与递推

      回溯:一层一层调用下去

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

        案例一

    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,[12,[13,]]]]]]]]]]
    def f1(list1):
        for x in list1:
            if type(x) is list:
                # 如果是列表,应该再循环、再判断,即重新运行本身的代码
                f1(x)
            else:
                print(x)
    f1(l)

      

  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/bk134/p/12567732.html
Copyright © 2011-2022 走看看