在一次采访中,最近有人问我一个与以下类似的问题:我必须构建一个递归函数来显示是否连接了两个节点。如何使以下代码正常工作?有没有办法通过引用传递a,b,c,所以当它们实例化时,这在我调用check_connection时有效。 Node是一个可变对象,因此它应该像通过引用一样进行操作,但事实并非如此,因为存在错误:“ NoneType不可迭代”。任何建议表示赞赏。

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)

最佳答案

问题是None不是可变对象。您应该将它们设置为没有邻居的节点,而不是将a,b,c设置为None。这样,它们将被后面的声明更改。如您目前所知,a的邻居不是c而是None,因为c只是在那时指向None的变量,而不是对Node对象的引用。

关于python - 如何检查两个节点是否具有递归功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38271944/

10-12 22:09