zoukankan      html  css  js  c++  java
  • 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
    '''
  • 相关阅读:
    账户管理命令 useradd、groupadd
    项目估算与计划不是一般的难!(1)——从建筑工程说起
    图的存储
    "Storage Virtualization" VS "Software-Defined Storage"
    项目代码风格要求
    struts2入门程序
    poj 3422 (费用流)
    项目估算与计划不是一般的难!(2)——估算要估啥?
    HDU1700:Points on Cycle
    数据结构 邻接矩阵深度及广度优先
  • 原文地址:https://www.cnblogs.com/jason-lv/p/8243518.html
Copyright © 2011-2022 走看看