""" recursive graph in class Nov 13 """ class GraphNode(object): """ A node in a tree """ def __init__(self, name=""): self.name = name self.friends = [] self.counted = False def __str__(self): result = "GraphNode(" + self.name + ": " for friend in self.friends: result += " " + self.friend.name return result + ")" def befriends(self, friend): self.friends.append(friend) # We can't recursively call friend.befriends(self) # here, because that would be "friends forever" # which would exceed the recursion limit. friend.friends.append(self) def network_size(self): size = 1 # me self.counted = True for friend in self.friends: # Oops: infinite recursion #size += friend.network_size() if not friend.counted: size += friend.network_size() return size n = GraphNode('n') m = GraphNode('m') p = GraphNode('p') q = GraphNode('q') n.befriends(m) n.befriends(p) p.befriends(q) q.befriends(n) def main(): size = n.network_size() print "size of network is", size if __name__ == "__main__": main()