从递归函数返回值

2024-10-17 06:29:45 发布

您现在位置:Python中文网/ 问答频道 /正文

此代码打印图形中从startNode到destinationNode的所有路径。 我从https://www.geeksforgeeks.org/find-paths-given-source-destination/复制了它,并对它进行了轻微的修改。代码运行得非常好,但我需要返回路径而不是打印路径,但不知道如何执行。 如果我将return添加到printAllPathsUtil(i, d, unvisited, path),它只返回其中一个路径

我不太擅长递归,现在不知道该怎么办

async def getAllPathsUtil(s, d, unvisited, path): 
    unvisited.append(s)
    path.append(s) 
    if s == d: 
        path
    else: 
        for i in (await children(s)):
            if not(i in unvisited):
                await getAllPathsUtil(i, d, unvisited, path)
    path.pop() 
    unvisited.remove(s)

async def printAllPaths(startNode, destinationNode):
    all_paths = await getAllPathsUtil(startNode, destinationNode, [], [])
    print(all_paths)

Tags: path代码in路径asyncifdefall
1条回答
网友
1楼 · 发布于 2024-10-17 06:29:45

如果您想保留递归算法,那么使用yield可能是最简单的选择

def graph_paths(s, d, visited, path): 
    visited.append(s)
    path.append(s) 
    if s == d: 
        yield path
    else: 
        for i in children(s):
            if i not in visited:
                yield from graph_paths(i, d, visited, path)

    path.pop() 
    visited.remove(s)

def print_graph_paths(start_node, dest_node):
  for path in graph_paths(start_node, dest_node, [], []):
    print(path)

但作为一种更好的方法,我建议用堆栈替换递归调用,它将消除最大递归深度问题

相关问题 更多 >