python - 递归满足条件时返回值

标签 python recursion conditional-statements

我正在尝试在图表中查找旅行。我编写了以下代码,这似乎可以正确打印游览。我希望它在找到第一个游览后停止并将该游览作为列表返回。但是,递归堆栈似乎已完成,但我没有得到所需的结果。当我找到第一个游览(即满足我的条件)时,如何返回值并完全停止递归?谢谢。

def get_tour(start, graph, path):
    if path==[]:
        from_node=start
    else:
        from_node=path[-1][1]

    if graph==[]:
        if start in path[-1]:
            print "Tour Found"
            return path

    else:
        edges=[node for node in graph if from_node in node]
        for edge in edges:
            to_node=[i for i in edge if i<> from_node][0]
            p=list(path)
            p.append((from_node,to_node))            
            g=list(graph)
            g.remove(edge)
            get_tour(start, g,p)


g=[(1,2), (1,3), (2,3)]

get_tour(1, graph=g, path=[])

最佳答案

使用递归时,您需要将返回值传递回整个调用堆栈。通常这不是使用递归的最佳方法。

无需详细介绍代码,这里有一个快速建议:

def get_tour(start, graph, path):
    ret_val = None
    # Some code..
    if graph==[]:
        # Some code..
    else:
        edges=[node for node in graph if from_node in node]
        for edge in edges:
            # Some more code..
            ret_val = get_tour(start, g,p)
            if ret_val:
                break
    return ret_val

关于python - 递归满足条件时返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21603863/

相关文章:

python - 是否有必要在 python 中调用文件处理程序的刷新方法

python - Plotly:如何将 ticktext 重新定位到零线附近?

python - 从 m by n np.array 中找出 m "smallest"个元素

java - 这个条件有什么问题吗?

Struts2 迭代器内的条件检查

python - 为什么在 Python 中将元组包含在解码的 SSL 证书中?

java - 如何在java中的递归函数中创建数组

java - Java中的BST递归实现

recursion - 递归自实例化组件[VHDL]

c# - 使用条件运算符转换为不同类型