zoukankan      html  css  js  c++  java
  • 递归

    递归

    递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用

    def count(n):
        print(n)
        count(n+1)
        
    count(0)
    

    调用函数会产生局部的名称空间,占用内存,因为上述这种调用会无需调用本身,python解释器的内存管理机制为了防止其无限制占用内存,对函数的递归调用做了最大的层级限制
    可以修改递归最大深度

    import sys
    sys.getrecursionlimit()
    sys.setrecursionlimit(2000)
    
    def num(n):
        print('from num',n)
        num(n+1)
    num(1)
    # 虽然可以设置,但是因为不是尾递归,仍然要保存栈,内存固定,不可能无限递归
    # 递归应该分为两个明确的阶段,回溯与递推
    

    递归的总结:

    • 必须有一个明确的结束条件
    • 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
    • 递归的效率不高,次数过多,可能导致栈溢出

    案例:一个数递归除2

    def calc(n):
    
        s = int(n/2)
        print(s)
        if s == 0:
            return 'Done'      # return函数结束
    
        calc(s)  # 递归
    calc(10)
    

    02.求阶乘 n! = 1x2x3x4..xn

    def mult(n):
    
        if n == 1:
            return 1
        return n * mult(n-1)
    
    print(mult(4))
    
  • 相关阅读:
    Linux 内核开发—内核简单介绍
    strcmp函数和strcpy函数
    POJ 3734
    怎样使用SetTimer MFC 够具体
    java 递归函数
    海量数据存储
    使用WinINet和WinHTTP实现Http訪问
    getline函数
    UDP编程
    数据文件传输通道技术解决方式
  • 原文地址:https://www.cnblogs.com/zhoukaivfx/p/10787505.html
Copyright © 2011-2022 走看看