如何在递归函数中替换全局变量

时间:2017-09-13 00:26:18

标签: python-3.x

在这里,我写了一些代码来查找图形的组件编号,输入样式如下:

5
4
0 1
0 2
1 2
3 4

第一行是顶点数,第二行是边数,其余是每条边。

在我的代码中,我在递归函数中使用了一个全局变量,所以有一些好方法可以替换它吗?换句话说,如何以更好的方式对函数进行编程?

代码:

def dfs(graph, root_vertex):
    global visited

    visited.add(root_vertex)

    for pairs in graph:
        if (root_vertex  in pairs) and pairs[1 -pairs.index(root_vertex)] not in visited :
            visited.add(pairs[1 - pairs.index(root_vertex)])
            dfs(graph, pairs[1 - pairs.index(root_vertex)])  


vertex_num = int(input())
edge_num = int(input())
graph = []

for i in range(edge_num):
    graph.append(tuple(sorted(map(int,input().split()))))


tot_vertex = set([i for i in range(vertex_num)])

visited = set()
count  = 0


while list(tot_vertex -  visited):
    dfs(graph, list(set(tot_vertex) -  set(visited))[0])
    count += 1

print(count)

1 个答案:

答案 0 :(得分:0)

当您需要跨不同函数调用可访问的变量时 - 无论是不同的函数还是相同函数的递归调用 - 模式是创建类的函数方法,然后使用成员变量来实现"全球&#34 ;.这是类的基本用例。

此处visited集可以是成员变量,只要您一次不会从多个线程中搜索。这可以作为一个限制,因为Search应该是类,而不是被搜索的东西。如果需要同时搜索多个线程,则每个线程创建一个Search对象。