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

    递归函数的概念:

    直接或间接的调用自身的函数,称为递归函数。

    每调用一次自身,相当于复制一份该函数,只不过参数有变化,参数的变化,就是重要的结束条件

    下面是一个递归函数的实例:

    #coding=utf-8
    def
    calc(n): print(n) if int(n/2) > 0: calc(int(n/2)) else: print('------') print(n) calc(10)

    打印结果:

    10
    5
    2
    1
    ------
    1
    2
    5
    10

    第一次接触递归函数的人,都会被它调用本身而搞得晕头转向,而且看上面的函数调用,以为得到的结果会是:

    10
    5
    2
    1
    ------
    1

    为什么以为会得出上面的结果呢?因为都把调用函数本身之后的代码给忘记了,就是else之后的python 代码。

    实际此递归函数输出的是以下结果:

    10
    5
    2
    1
    ------
    1
    2
    5
    10

    相信大家看到这里都有点蒙,我也一样,我第一次看到这个递归函数时,只能理解到第一个结果。那是因为,大部分人在做事情的时候,中断第一件事,被安排去做第二件事的时候,就会把第一件事后续的事情给忘记,如果在做第二件事的时候,又被中断,被安排去做第三件事,就会把第一件、第二件要做的后续的事情给忘记......,这就是不理解递归函数的原因。

         下面我把此递归函数做了一个分解,希望能够帮到大家。 

         详解递归函数,当调用递归函数calc(10)时,执行过程如下:

    #coding=utf-8
    def calc(10):
        print(10)
        if int(10/2) > 0:
        
            def calc(5):
                print(5)
                if int(5/2) > 0:
    
                    def calc(2):
                        print(2)
                        if int(2/2) > 0:
    
                            def calc(1):
                                print(1)
                                print('------')
                                print(1)
                        print(2)
                print(5)
        print(10)

    在调用函数本身时,它之后的代码并没有结束,而是在等待条件为False 时,再接着执行之后的代码,同一个颜色的print()语句等待对应颜色的函数。

    如果看到这里还不理解,那请看下面过程

    #coding=utf-8
    def calc(10):
    
        print(10)
    
        if int(10/2) > 0:
            calc(int(10/2))
        else:
            print('------')
    
        print(10)
        
        |
        |
        v
    def calc(5):
    
        print(5)
    
        if int(5/2) > 0:
            calc(int(5/2))
        else:
            print('------')
    
        print(5)
        
        |
        |
        v
    def calc(2):
    
        print(2)
    
        if int(2/2) > 0:
            calc(int(2/2))
        else:
            print('------')
    
        print(2)
        
        |
        |
        v
    def calc(1):
    
        print(1)
    
        if int(1/2) > 0:      #此时条件不成立,走else
            calc(int(1/2))
        else:
            print('------')
    
        print(1)

    可以看到,每次条件成立都会调用函数本身,那函数本身最后是有一个print的,所以才会出现对称的那种结果。

  • 相关阅读:
    P1119 灾后重建
    P1453 城市环路
    21.10.28模拟 C
    21.10.28模拟 String Coloring AGC26 C
    P1155 [NOIP2008 提高组] 双栈排序
    21.10.27模拟 solve
    21.10.27模拟 P4157 [SCOI2006]整数划分
    P2168 [NOI2015] 荷马史诗
    P3052 [USACO12MAR]Cows in a Skyscraper G
    P2533 [AHOI2012]信号塔 P1742 最小圆覆盖
  • 原文地址:https://www.cnblogs.com/yizhipanghu/p/10717161.html
Copyright © 2011-2022 走看看