【发布时间】:2019-12-04 03:13:30
【问题描述】:
我需要编写一个递归函数,如果存在,则返回祖先和后继者之间的界线。该函数将祖先、继任者和孩子及其父母的字典作为参数。我目前拥有的代码在某些情况下有效,但并非全部有效,所以它肯定还缺少一些东西。我目前尝试使用列表来添加人名,但我需要以某种方式将它们一一打印出来,结果最终。这就是我所拥有的和示例。前 4 个有效,但最后 3 个无效。在看第一个例子的时候,基本上它需要返回的是
Lucia
Adele
Sam
John
table = {'John': ('Sam', 'Mary'),
'Mary': ('Konstantin', 'Marie'),
'Rita': ('Sam', 'Mary'),
'Simon': ('Sam', 'Mary'),
'Marie': ('Carl', 'Liz'),
'Sam': ('Joseph', 'Adele'),
'Adele': ('Johannes', 'Lucia'),
'Konstantin': ('Viktor', 'Jelena'),
'Joseph': ('August', 'Emma'),
'Viktor': ('Nikolai', 'Maria')}
def return_line(ancestor, successor, table, line = []):
if successor in table:
parents = table[successor]
if ancestor in parents:
if ancestor not in line:
line.append(ancestor)
if successor not in line:
line.append(successor)
else:
successor_1 = parents[0]
successor_2 = parents[1]
return_line(ancestor, successor_1, table)
if line == []:
return_line(ancestor, successor_2, table)
else:
ancestor = line[-1]
return_line(ancestor, successor, table)
else:
return
if line != []:
return line
else:
return("Doesn't exist")
print(return_line("Lucia", "John", table))
print(return_line("Marie", "Adele", table))
print(return_line("Maria", "Mary", table))
print(return_line("Emma", "Rita", table))
print(return_line("Nikolai", "John", table))
print(return_line("Jelena", "John", table))
print(return_line("Carl", "Mary", table))
【问题讨论】: