递归

递归

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

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))
原文地址:https://www.cnblogs.com/zhoukaivfx/p/10787505.html