'''
练习 :计算列表长度
问题描述:
不使用 Python 内置的 len() 函数,用递归计算一个列表里有多少个元素。
'''

'''
1.问题: 用递归计算 '一个列表' 里有多少个元素。
    1.1 明确问题: 列表的定义, 多个少个元素的准确定义.  目的:拆分列表,寻找递归关系,利用计数器,计数器结果=列表元素数量
    1.2 元素属性,及目的分析 
        1.2.1 传入参数就是列表,
        列表
            属性:1.列表的下标,已知存在0和1.  ()
                2.切片:返回值-列表,列表的多组数据
        1.2.2 寻找递归关系 (不使用下标的情况)
            传入参数 list = [未知数量]
            设:n = 列表元素数量
            n = 1, 计数器1=1 + 切片[1:]
            n = 2, 计数器2=1 + 结果(计数器1结果)
            n = 3, 计数器3=1 + 结果(计数器2结果)
            n = n, 计数器n=1 + 结果(计数器n-1结果)
            例外: 列表为空/输入参数不是列表/
            
2.设计递归函数
    2.1 明确函数做什么
        传入参数 :一个列表
        存在递归关系,调用自身
        加法运算,返回值,
        如何收敛: 自身函数(切片[1:]) , (相当于'调用自身时参数在缩小',直到基准情形的条件)  
        
    2.2 基准情形
        列表为1时, 返回计数器数值 1
        
    2.3 寻找递归关系
        传入参数 list = [未知数量]
        设:n = 列表元素数量
        n = 1, 计数器1=1 + 切片[1:]
        n = 2, 计数器2=1 + 结果(计数器1结果)
        n = 3, 计数器3=1 + 结果(计数器2结果)
        n = n, 计数器n=1 + 结果(计数器n-1结果)
        例外: 列表为空/输入参数不是列表/
        
    2.4 验证收敛性 = 调用自身时,传入的参数在缩小.
        函数(切片[1:])
        
'''

def l1(a):
    """
    递归计算一个列表的长度
    :param a: list
    :return: 整数,代表列表的元素个数
    """
    if a[1:]  == [] and a != []:
        return 1
    elif a[1:] != [] and type(a) == list:
        return 1+l1(a[1:])
    elif type(a) != list :
        print('参数为列表类型')
    elif a == []:
        return 0

# 验证递归正确
a = [1,'1','2','3','4',5,6]
b = 1
c = []
print(l1(a))

PixPin_2026-02-03-练习3