不明白伪代码中返回的内容

时间:2013-12-17 07:05:42

标签: pseudocode a-star

我正在尝试在我正在制作的游戏中添加A *路径查找。我现在明白了怎么做,但我不明白回报是做什么的。 http://en.wikipedia.org/wiki/A*_search_algorithm是我正在使用的参考。问题:

  • return reconstruct_path(came_from, goal)做什么?
  • 何时调用return failure

3 个答案:

答案 0 :(得分:0)

通常,return function()首先评估堆栈上的function(),然后父/调用函数返回函数返回的任何内容。

在您的情况下,return reconstruct_path(came_from, goal)会评估reconstruct_path(came_from, goal)并返回值。

编辑:

例如 -

A(){
  print(B());
}

B(){
  return 10;
}

这是一个更加“静态”的回报如何运作的例子。这里,A()是调用函数,B()是被调用函数。在这种情况下,返回的值为10。继续,在您的问题中,return f()首先调用f()f()中包含return并返回一个值 - 比如10。然后无论f()计算什么,都会被发送回原来的被叫函数。

答案 1 :(得分:0)

reconstruct_path只是递归地返回路径所包含的节点列表。

答案 2 :(得分:0)

以下是维基百科链接中的功能:

function reconstruct_path(came_from, current_node)
    if current_node in came_from
        p := reconstruct_path(came_from, came_from[current_node])
        return (p + current_node)
    else
        return current_node

return reconstruct_path(came_from, goal)调用此函数。第一个if递归调用reconstruct_path,每次都使用不同的current_node,直到current_node不在came_from中(直到if失败)。每次调用自身时,它都会返回p := p + current_node。每次调用都会p不断添加,p成为一系列节点。

它遍历的东西came_from是一些地图。它可能看起来像这样:

1, 2
2, 3
3, 4

调用came_from[1]将返回2.或者,您可以说,“2来自1”。

简而言之:reconstruct_path会自行调用,每次在地图came_from中向后退一步,直到它构建路径p。这可能看起来像“1,2,3,4”,坚持上面的例子。

无法找到路径时调用

return failure