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

    什么是函数递归

    函数的嵌套调用是函数嵌套函数,函数递归就是特殊的嵌套调用,他在调用一个函数的过程中又直接或间接地调用了它自身.通俗讲就是函数A调用了函数A

    count=0
    def f1():
        global count   #下面的count是全局的count
        count+=1
        print(count)
        f1()
    f1()    
    
    #报错,调用时超过最大递归深度,函数自动终止循环
    

    递归的核心

    递进时可以达到一个结果,问题规模越来越小(不一定要真正的达到);设置一个条件,能够让最后一次函数调用结束

    递归必须要有两个明确的阶段

    1. 递推:一层一层递归调用下去,进入下一层递归的问题规模都将会减小.
    2. 回溯:递归必须要有一个明确的结束条件,在满足该条件开始一层层回溯.

    递归的精髓在于通过不断地重复逼近一个最终的结果,它更多的是一种思想,用于解决某些问题

    count=0
    def f1():
        global count   #下面的count是全局的count
        if count>100:
            return
        count+=1
        print(count)
        f1()
    f1()    
    

    用递归求年龄

    16/18/20/22/24/26

    第一个人的年龄是16,我要求出5个人后的年龄-->26

    age=16
    def age_func(x): # age_func(5)  = age_func(4) = age_func(3) = age_func(2) = age_func(1) = age_func(0) =26
        global age   # x的规模在减小  # x = 5 # x =4 # x =3 # x =2  # x = 1 # x = 0
        if x==0:
            return age # 终止函数,age=26,这是age_func(0)
        age+=2 # age = 18 # age = 20  # age 22  # age = 24 # age = 26
        return age_func(x-1) # age_func(4) # age_func(3) # age_func(2) # age_func(1) # age_func(0)
    res=age_func(5)
    print(res) #26
    '''
    age_func(5) --> age = 18  --> return age_func(4) # return 26
    age_func(4) --> age = 20 --> return age_func(3)
    age_func(3) --> age = 22 --> return age_func(2) 
    age_func(2) --> age = 24 --> return age_func(1)  == return age_func(0)  == return age == return 26
    age_func(1) --> age = 26 --> return age_func(0) == return age == return 26
    
    return age # age = 26
    '''
    
    #另一种写法
    age=16
    def age_func(x):
        global age
        if x==0:
            return age
        return age_func(x-1)+2
    res=age_func(5)
    print(res)
    '''
    age_func(5) --> return age_func(4)+2 == 24+2 =26
    age_func(4) --> return age_func(3)+2 == 22+2 = 24
    age_func(3) --> return age_func(2)+2 == 20+2 = 22
    age_func(2) --> return age_func(1)+2 == 18+2 = 20
    age_func(1) --> return age_func(0)+2  == 16+2= 18
    '''
    
  • 相关阅读:
    NOIP201310华容道
    NOIP201110观光公交
    markdown
    【NOIP2016】愤怒的小鸟
    【NOIP2016】组合数问题
    [TJOI2019]唱,跳,rap,篮球(生成函数,组合数学,NTT)
    CF1217E Sum Queries? (线段树)
    CF1178F Short/Long Colorful Strip(DP)
    ZROI 暑期高端峰会2019 总结
    [HNOI2012]集合选数(构造,状态压缩,DP)
  • 原文地址:https://www.cnblogs.com/aden668/p/11352091.html
Copyright © 2011-2022 走看看