在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