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

    函数递归

    一、函数递归

    函数递归指的是重复的直接或者间接的调用函数本身

    这是一种函数嵌套调用的表现形式

    直接调用:指的是在函数内部,直接调用函数本身

    间接调用:指的是两个函数之间互相调用,间接造成递归

    例如

    直接调用

    def func():
        print('from func...')
        func()
    
    
    func()
    

    在调用func的时候,又调用func,这就是直接调用函数func本身

    间接调用

    def f1():
        print('from f1...')
        f2()
    
    
    def f2():
        print('from f2...')
        f1()
    
    
    f1()
    

    在调用f1的过程中,又调用f2,而在调用f2的过程中,又调用f1,这既是间接调用函数f1本身

    Python中有默认递归深度——1000 实际上是998

    num = 1
    def func():
        global num
        print('from func...', num)
        num += 1
        func()
    
    
    func()
    from func... 998Traceback (most recent call last):
    

    import sys

    获取操作系统资源的模块

    ​ 获取递归深度:sys.getrecursionlimit()

    ​ 设置递归深度:sys.getrecursionlimit(深度值,比如2000)

    二、回溯与递推

    单纯的递归没有任何意义,想要有意义,必须遵循两个条件

    回溯:指的是重复执行,每一次执行都要等到一个更接近于结果的结果,回溯必须有一个终止条件

    递推:当回溯找到一个终止条件后,开始一步一步往上递推

    举个例子:

    第一个人是18岁,第二个人说比他大2岁,第三个人说比第二个大2岁,以此类推,问第5个人多大?

    age5 = age4 + 2
    age4 = age3 + 2
    age3 = age2 + 2
    age2 = age1 + 2
    age1 = 18  # 回溯终止的结果
    
    总结为:
    result = age(n - 1) + 2
    
    def age(n):
        if n ==1:
            return 18
        return age(n - 1) + 2
    
    
    res = age(5)
    print(res)
    26
    
  • 相关阅读:
    CF 444B(DZY Loves FFT-时间复杂度)
    摆弄【Nhibernate 协会制图--导乐陪伴分娩】
    固定的报文统计报告的规定
    CSS——(2)与标准流盒模型
    自动复制转换StringBuffer
    IM信息网
    Oracle Redo Log
    【转载】有哪些省时小技巧,是每个Linux用户都应该知道的
    Linux snmp
    MySQL zabbix
  • 原文地址:https://www.cnblogs.com/YGZICO/p/11890172.html
Copyright © 2011-2022 走看看