04_09、递归函数

一、递归函数

  1、关于递归函数

    递归函数是直接或间接的调用自己

    由此会使函数不间断的调用自己,所以递归一定要有结束条件

    默认的递归深度(循环次数)是1000次

    递归深度的查看和修改方式

import sys  # 引入sys模块

print(sys.getrecursionlimit())  # 查看最大递归深度
# 结果为1000
sys.setrecursionlimit(2000)  # 修改最大递归深度
print(sys.getrecursionlimit())
# 结果为2000

  2、简单案例

复制代码
count = 1


def index():
    global count
    count += 1
    print('from index', count)
    index()


index()
复制代码

  3、实际应用

复制代码
# 有5个人,如果A比B大2岁,B比C大2岁,以此类推,现知E18岁,求A的年纪
# 思路:a=b+2  b=c+2  c=d+2  d=e+2 e=18
# 当age=18的时候,循环4次age=age+2
# 或者定义一个函数,让函数返回值依然为该函数名,完成函数递归,代替循环
def age(n):  # 定义一个函数
    if n == 1:
        return 18  # 设置结束条件

    return age(n - 1) + 2  # 返回值的名字依次减1,值依次加2


print(age(5))  # 打印出n=5时的结果
复制代码

  4、应用进阶

复制代码
# 要求把列表内的数值全部拆分出来
l = [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, ]]]]]]]]]]


# 分析:列表是整型+列表额嵌套模式
# 思路:如果是整型,直接打印输出;如果不是整型(也就是列表格式),循环
# 具体方式:定义一个递归函数,如果是整型,直接打印输出
# 如果是列表,递归循环如果
def get_num(l):
    for i in l:
        if type(i) is int:
            print(i)
        else:
            get_num(i)


get_num(l)
复制代码

 

 

posted @   三三得九86  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示