如果不只是在伪代码中调用函数,而是编写一个 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
。
如果不只是在伪代码中调用函数,而是编写一个 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
。