在Python的递归函数中,Set被清空

在Python的递归函数中,Set被清空,python,recursion,Python,Recursion,对于赋值,我必须创建一个函数,该函数通过字典查找那些比指定参数年轻的人。字典的编写方式是,每个“人”都有其他人依附于他们,这些人是他们的后代,他们也可以有后代等等。我需要让程序工作,以便它遍历指定人的所有后代,并返回那些小于n的人。问题是,我在函数的开头定义了一个set(),即使它之后被填充,函数返回的值仍然是set(),因为它是递归的。我该如何解决这个问题 def funct(name, n): younger = set() for child in people[name]

对于赋值,我必须创建一个函数,该函数通过字典查找那些比指定参数年轻的人。字典的编写方式是,每个“人”都有其他人依附于他们,这些人是他们的后代,他们也可以有后代等等。我需要让程序工作,以便它遍历指定人的所有后代,并返回那些小于
n
的人。问题是,我在函数的开头定义了一个
set()
,即使它之后被填充,函数返回的值仍然是
set()
,因为它是递归的。我该如何解决这个问题

def funct(name, n):
    younger = set()
    for child in people[name]:
        if age[child] < n:
            younger.add(child)
        funct(child, n)
    return younger

一个选项是显式地传递
set
,在未提供时创建它(即在初始调用时):

def函数(名称,n,n=None):
如果没有:
杨格=集()
对于人[名]中的儿童:
如果年龄[儿童]
至于我为什么设置默认值
younger=None
,请参阅


我还建议不要仅按范围访问功能中的
人员
年龄
;让他们成为明确的参数。

更年轻的人
保留所有符合年龄要求的后代的名字,而不仅仅是符合年龄要求的直系子女的名字

def funct(name, n):
    younger = set()
    for child in people[name]:
        if age[child] < n:
            younger.add(child)
        younger.update(funct(child, n))  # Changed line
    return younger
def函数(名称,n):
杨格=集()
对于人[名]中的儿童:
如果年龄[儿童]
是否可以在不向函数中添加参数的情况下执行此操作(赋值说明是:编写函数funct(name,n),…)@x4nga另一个选项是将递归调用(当前未赋值)返回的
集显式滚动到
中。
def funct(name, n, younger=None):
    if younger is None:
        younger = set()
    for child in people[name]:
        if age[child] < n:
            younger.add(child)
        funct(child, n, younger)
    return younger
def funct(name, n):
    younger = set()
    for child in people[name]:
        if age[child] < n:
            younger.add(child)
        younger.update(funct(child, n))  # Changed line
    return younger