Python 使用递归处理集合

  • Post category:Python

Python 递归函数是一种函数调用自身的技巧。使用递归方法可以用来处理集合(比如列表、元组等)。

递归方法一般都分为两个步骤:递归基和递归关系。即要找到最基本的问题,然后问题规模逐渐缩小,直至满足递归基,返回结果。

下面我们提供两个使用递归处理集合的示例:

示例一:计算集合中所有数的和

def sum_list(lst):
    # 递归基,如果列表为空,直接返回0
    if len(lst) == 0:
        return 0
    # 递归关系,列表中第一个数加上剩余数的和
    else:
        return lst[0] + sum_list(lst[1:])

# 待求和的列表
lst = [1, 2, 3, 4, 5]
# 输出结果
print(sum_list(lst)) # 15

上述代码中,我们通过递归方法计算出列表中所有数的和。在递归关系中,我们每次都把第一个数跟剩下的数继续做累加,直到列表中没有数为止。

示例二:查找嵌套列表中的最大数

def max_num(lst):
    # 递归基,当前列表没有元素,返回None
    if not lst:
        return None
    # 递归关系,对于嵌套列表,递归每一个子列表找到最大数
    else:
        # 遍历嵌套列表,当前元素是列表类型则继续递归
        maximum = lst[0]
        for item in lst:
            if type(item) == list:
                sub_max = max_num(item)
                if sub_max is not None and sub_max > maximum:
                    maximum = sub_max
            elif item > maximum:
                maximum = item
        return maximum

# 嵌套列表,示例中最大数为6
lst = [1, 2, [3, 4, [5, 6], 7], 8, [9]]
# 输出结果
print(max_num(lst)) # 6

上述代码中,我们使用递归方法查找嵌套列表中的最大数。对于嵌套列表,递归每一个子列表继续查找最大数,最后返回整个嵌套列表中的最大数。

使用递归处理集合可以使代码更加简洁优雅,但由于递归可能会导致栈溢出等问题,建议在使用时进行合理的优化处理。