• python3 递归函数的理解


    1.递归的定义

    # 1 递归的定义
    # 一个函数直接或者间接调用自己,那么这个函数就称为递归函数。
    # 那这个函数如果一直自己调用自己,是不是会一直处于死循环状态,答案是不会,因为python为了杜绝此类现象,强制的将递归层数控制在了997层。
    # 为了证实上面的说法,定义一个函数试试看
    count = 0
    def story():
        global count
        count += 1
        print(count)
        story()
    
    # story()
    '''结果:  调用第998层的时候就报错了
    998Traceback (most recent call last):
      File "H:/Python Scripts/0108递归函数/知识点总结.py", line 12, in <module>
    '''
    
    # 当前我也可以通过引用模块,打破这个限制,如下操作:
    import sys
    sys.setrecursionlimit(1000000)
    count = 0
    def story():
        global count
        count += 1
        print(count)
        story()
    
    story()
    '''结果:
    3809
    我的笔记本性能比较渣,只能打印到 3809
    '''

    2.递归的特性

    # 2 递归特性
    # 递归特性:
    # 1. 必须有一个明确的结束条件
    # 2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    # 3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,
    #    每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

    3.简单的例子

    # 3 简单的递归函数
    # 举个简单的例子,我们来计算阶乘 n! = 1 * 2 * 3  * .....
    def func(n):
        if n == 1:
            return n
        elif n > 1:
            return n * func(n - 1)
        else:
            return '请传递大于0的参数'
    print(func(5))
    '''结果:
    120
    相当于 1 * 2 * 3 * 4 * 5 = 120
    '''
  • 相关阅读:
    Linux PXE无人值守网络装机
    Linux 自动化部署DNS服务器
    Linux DNS服务配置
    Mysql数据库基础学习笔记
    Linux AIDE(文件完整性检测)
    mysql:[Err] 1068
    sql的date、时间函数、时间戳
    hive之建立分区表和分区
    excel转sql代码
    spark-submit之使用pyspark
  • 原文地址:https://www.cnblogs.com/jason-lv/p/8243518.html
Copyright © 2020-2023  润新知