我正在尝试用这个函数def friends(self, name, degree):
来思考递归函数。这个的目的是返回指定度数的所有 friend 的集合(用于地址簿)。它是名为 class SocialAddressBook:
的更大类的最后一部分。此类中的“学位”允许用户“查询” friend 的 friend :学位一是直接 friend ,学位二是 friend 的 friend ,等等。我的代码是
def friends(self, name, degree):
fs = set()
if degree == 0:
return set()
if degree == 1:
据我所知…… 还有更多背景信息:
Transitive friendship:
Fred → Barb → Jane → Emma → Lisa
Fred → Sue
Jane → Mary
所以我的测试是:a.friends('Fred', 1) == {'Barb', 'Sue'}
a.friends('Fred', 2) == {'Barb', 'Jane', 'Sue'}
a.friends('Fred', 3) == {'Mary', 'Barb', 'Jane', 'Sue', 'Emma'}
a.friends('Fred', 4) == {'Barb', 'Emma', 'Mary', 'Lisa', 'Sue', 'Jane'}
它只会上升到 4 级。既然我知道它会上升到多少级,那么我应该递归地还是手动执行此操作?。
如果有人能为我指出正确的方向,告诉我如何递归完成这个,那就太棒了,谢谢!
最佳答案
我想说的是迭代地执行此操作:让它将 friend 添加到当前列表 n 次,其中 n 是一个输入参数。
fs = set(self)
for i in range (n):
wider = set()
for chum in fs.copy():
for new_chum in chum.friend_list:
fs += new_chum
在每个级别,从当前集合的 friend 中创建一个更广泛的集合。完成所有这些操作后,将它们添加到 friend 组中。重复 N 次。
关于python - 递归添加到集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43078776/