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

    Python:函数递归

    定义:在调用一个函数的过程中直接或间接的调用该函数本身,称之为递归调用。递归调用最多能调用999层。

    基础模型:  

    def func():
        print('from func')
        func()    #直接调用自身
        
    func():
    def func():
        print('from func')
        bar()    #间接调用自身
    
    def bar():
        print("from bar")
        func()
    
    func()

    虽然以上两中方式为函数递归的基础模型,但往往不能直接这样使用。因为没有一个函数的结束条件,仅仅相当于一个死循环。

    递归分为两个重要的阶段: 递推+回溯

      递推:函数不断减少问题规模直至最终的终止条件。

      回溯:拿到最终明确的值后,返回给上次调用进行处理,直至初始层。

     练习题:解决年龄问题,求出alex的年龄

    """
    alex 他比佩奇 大两岁。  4   age(3) + 2
    佩奇 他比日天 大两岁。  3   age(2) + 2
    日天 他比太白 大两岁。  2   age(1)  + 2
    太白:我今年23.         1   23
    """
    
    def age(n):
        if n == 1:
            return 23
        else:
            return age(n-1) + 2
    
    print(age(4))      #这里的4表示解决问题的规模

    29

    流程分析:

    """
    def age(4):
        if n == 1:
            return 23
        else:
            return age(3) + 2   23 + 2 + 2 + 2
    
    def age(3):
        if n == 1:
            return 23
        else:
            return age(2) + 2   23 + 2 + 2
             
    def age(2):
        if n == 1:
            return 23
        else:
            return age(1) + 2    23 + 2
            
    def age(1):
        if n == 1:
            return 23
        else:
            return age(0) + 2
    
    """

      注意在Python:
        1、递归调用必须有一个明确的结束条件
        2、在python中没有尾递归优化,递归调用的效率不高
        3、进入下一次递归时,问题的规模必须降低

     简单应用场景:

    取出列表  l=[1,2,[3,[4,[5,[6,[7,[8,9,[10]]]]]]]] 中的所有元素

    def get(l):
        for item in l:
            if isinstance(item, list):
                get(item)     #如果元素为一个列表,那么递归调用自己把该列表传给get()函数,进行递归调用
            else:
                print(item)
    get(l)
  • 相关阅读:
    linux的redis的安装和使用
    在linux上安装Mysql和使用
    linux的python3的安装
    linux的优化和命令
    LeetCode 542. 01 Matrix
    Qt keyPressEvent
    QOpenGLTexture 两个纹理叠加
    Qt5.6.0+OpenGL 纹理贴图首战告捷
    更改Qt Application为 Qt Console Application
    Learning part-based templates from large collections of 3D shapse CorrsTmplt Kim 代码调试
  • 原文地址:https://www.cnblogs.com/bailo/p/9162270.html
Copyright © 2011-2022 走看看