Python 重置我的列表的欧拉回路递归语句

Python 重置我的列表的欧拉回路递归语句,python,python-3.x,Python,Python 3.x,我的问题是,当我调用递归欧拉回路(图) 我的轨迹在顶部重置,轨迹=[]。我该怎么做 (电路应答的代码尚未完成,仍然必须在剩下一条边连接回起始顶点时实现……并且必须找出其他我确信会出现的错误。python新手)您可以将trail作为参数传递给欧拉电路的子调用 为函数指定trail的默认值None,以便知道它是否是顶级调用: def eulerian_circuit(graph): trail = [] for edge in graph: graph.sort(

我的问题是,当我调用递归欧拉回路(图)

我的轨迹在顶部重置,轨迹=[]。我该怎么做


(电路应答的代码尚未完成,仍然必须在剩下一条边连接回起始顶点时实现……并且必须找出其他我确信会出现的错误。python新手)

您可以将
trail
作为参数传递给
欧拉电路的子调用

为函数指定
trail
的默认值
None
,以便知道它是否是顶级调用:

def eulerian_circuit(graph):

    trail = []

    for edge in graph:
        graph.sort()
        a,b = edge 
        if not trail:
            trail.append(a)
            trail.append(b)
            graph.remove((a,b))
            print(graph)
        if a == trail[-1]:
            trail.append(b)
            graph.remove((a,b))
            print(graph)
        if not graph:
            return trail

    eulerian_circuit(graph)            
    return trail,graph           

eulerian_circuit([('a','b'), ('b','c'), ('a','f'), ('b','d'), ('d','f'), ('b','e'), ('e','g'), ('c','g'), ('f','g'), ('f','h'), ('g','h')])
用法:

def eulerian_circuit(graph, trail=None):
    if trail is None:
        trail = []
    ...
    eulerian_circuit(graph, trail):

您可以将
trail
作为参数传递给
eulerian_电路的子调用

为函数指定
trail
的默认值
None
,以便知道它是否是顶级调用:

def eulerian_circuit(graph):

    trail = []

    for edge in graph:
        graph.sort()
        a,b = edge 
        if not trail:
            trail.append(a)
            trail.append(b)
            graph.remove((a,b))
            print(graph)
        if a == trail[-1]:
            trail.append(b)
            graph.remove((a,b))
            print(graph)
        if not graph:
            return trail

    eulerian_circuit(graph)            
    return trail,graph           

eulerian_circuit([('a','b'), ('b','c'), ('a','f'), ('b','d'), ('d','f'), ('b','e'), ('e','g'), ('c','g'), ('f','g'), ('f','h'), ('g','h')])
用法:

def eulerian_circuit(graph, trail=None):
    if trail is None:
        trail = []
    ...
    eulerian_circuit(graph, trail):

非常感谢。现在似乎得到了一个“最大递归”错误。我尝试过添加if b=trail[-1],然后追加(a)和删除((a,b)),但这似乎也不起作用,这告诉我(a,b)不存在要删除的地方。好吧,你没有条件不调用
欧拉回路
,一次又一次……我对欧拉回路算法一无所知,我只是在帮助解决编码问题。在修改图形时,您正在迭代
图形,这是自找麻烦。我不确定我还能怎么解决这个问题。我想做的是找到一条只使用一次边(顶点可以多次使用)的路径,并从同一个顶点开始和结束。谢谢。。现在似乎得到了一个“最大递归”错误。我尝试过添加if b=trail[-1],然后追加(a)和删除((a,b)),但这似乎也不起作用,这告诉我(a,b)不存在要删除的地方。好吧,你没有条件不调用
欧拉回路
,一次又一次……我对欧拉回路算法一无所知,我只是在帮助解决编码问题。在修改图形时,您正在迭代
图形,这是自找麻烦。我不确定我还能怎么解决这个问题。我要做的是找到一条只使用一次边(顶点可以多次使用)的路径,并从同一个顶点开始和结束。