如果不只是在伪代码中调用函数,而是编写一个 return 函数(尤其是关于 CLR),这是否有意义?

Is there a meaning if instead of just calling the function in pseudocode one writes a return function (especially regarding CLR)?

如果不只是在伪代码中调用函数,而是编写一个 return 函数(尤其是关于 CLR),是否有意义?

例如是

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)

当然需要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)

现在这个函数应该return 树中的一个节点——其键等于k 的节点。如果你不使用 return 那么该函数将不会 return 任何东西(除了第一个 if 条件为真的情况)。

其次,这个函数调用自己:这是有意的。它是一种递归算法。这个想法是,如果当前节点不匹配,则搜索以其子节点为根的每个子树。为此,您可以使用相同的功能。当当前节点没有子节点或匹配时,此递归停止。

不带 return 和带 return 的代码都进行递归调用。区别在于没有 return 的版本不会对从该调用返回的内容做任何事情:它完全忽略它。带有 return 的那个将捕获 returned 值和 return 相同的值给它自己的调用者。

想象一下执行过程中进行了几次嵌套的递归调用,那么您可以将这种状态想象成一棵递归树,其中每个递归调用都处于挂起状态;等待对 return 的更深入调用。假设最后一个有 x.key == k。在那种情况下,特定的 x 被 returned。但它不是 returned 给初始调用者,而是给等待结果的递归调用者。如果 returned 值没有再次 returned 到递归树中上一层的调用者,那么 that 调用者将不会知道这个匹配 x。所以每个调用者必须返回 x 和 return 它也向上递归树。最后,初始调用者也会得到 x