如果不只是在伪代码中调用函数,而是写入返回函数(特别是关于CLR),是否有意义?
例如is
if x == NIL or x.key == k
return x
if x.key <= k
return Tree-Search(x.left,k)
else
return Tree-Search(x.right,k)等于
if x == NIL or x.key == k
return x
if x.key <= k
Tree-Search(x.left,k)
Tree-Search(x.right,k)发布于 2020-09-23 21:32:24
当然,return是必要的。据推测,引用的代码是Tree-search函数的主体,因此它实际上应该如下所示:
function Tree-Search(x, k)
if x == NIL or x.key == k
return x
if x.key <= k
return Tree-Search(x.left, k)
else
return Tree-Search(x.right, k)现在这个函数应该从树返回一个节点--这个节点的键等于k。如果您不使用return,那么该函数将不会返回任何内容(除非第一个if条件为真)。
第二,这个函数调用自己:这是有意的。这是一种递归算法。这样做的想法是,如果当前节点不匹配,那么搜索根在其子节点中的每个子树。为此,您可以使用相同的函数。当当前节点没有子节点或匹配时,此递归将停止。
没有return的代码和使用return的代码都进行递归调用。不同之处在于,没有return的版本不会对从调用中得到的东西做任何事情:它完全忽略它。带有return的那个将捕获返回的值并将相同的值返回给它自己的调用者。
假设执行执行了几个嵌套的递归调用,那么您可以将此状态想象为递归树,其中每个递归调用都是挂起的;等待更深层次的调用返回。让我们假设最后一个有x.key == k。在这种情况下,返回特定的x。但是,它不是返回给初始调用方,而是返回到等待结果的递归调用方。如果返回的值不再返回到递归树中的一个级别上的调用方,那么调用方将无法了解这个匹配的x。因此,每个调用方都必须返回该x并向上返回递归树。最后,初始调用方也将获得x。
https://stackoverflow.com/questions/64033586
复制相似问题