【发布时间】:2016-11-11 08:02:02
【问题描述】:
在一次采访中,我最近被问到一个类似的问题,如下所示:我必须构建一个递归函数来显示两个节点是否连接。我怎样才能使下面的代码工作?有没有办法通过引用传递a,b,c,所以当它们被实例化时,这在我调用check_connection时有效。 Node 是一个可变对象,因此它应该像通过引用一样工作,但似乎并非如此,因为存在错误:'NoneType is not iterable'。任何建议表示赞赏。
class Node():
def __init__(self, neighbours):
self.neighbours=neighbours
def return_neighbours(self):
return self.neighbours
def check_connection(first, second):
connections=first.return_neighbours()
for conection in connections:
if second in conection:
return True
else:
check_connection(conection,second)
a=None
b=None
c=None
a=Node(neighbours=[c])
b=Node(neighbours=[c])
c=Node(neighbours=[a,b])
check_connection(a,c)
【问题讨论】:
-
当您在
else:块中递归调用check_connection时,您并没有返回它的值;你只是调用它然后把返回的值扔掉,这意味着函数根本没有return语句,这意味着它默认返回None。 -
这是一个递归函数,所以我认为这不是问题
-
目前还不清楚
check_connection应该如何宣布其结果。如果第二个节点在邻居列表中,则返回True,因此这表明它旨在始终返回True或False。但是,如果第二个节点不在邻居列表中,则它根本什么都不返回(因此None),并且当它在脚本底部调用时,甚至没有捕获返回值,因此这表明您打算以其他方式让函数宣布其结果(可能是您遗漏的print语句?)
标签: python recursion pass-by-reference