algorithm - 如果不只是在伪代码中调用函数,而是编写一个返回函数(尤其是关于 CLR),那是否有意义?
问题描述
如果不只是在伪代码中调用函数,而是编写一个返回函数(尤其是关于 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)
现在这个函数应该从树中返回一个节点——键等于k的节点。如果您不使用return
,则该函数将不会返回任何内容(第一个if
条件为真的情况除外)。
其次,这个函数调用自己:这是有意的。它是一种递归算法。这个想法是,如果当前节点不匹配,则搜索以其子节点为根的每个子树。为此,您可以使用相同的功能。当当前节点没有子节点或匹配时,此递归停止。
return
不带和带的代码都return
进行递归调用。不同之处在于,没有的版本不会return
对从该调用返回的内容做任何事情:它完全忽略它。一个 withreturn
将捕获返回的值并将相同的值返回给它自己的调用者。
想象一下执行进行了几个嵌套的递归调用,那么您可以将此状态想象为一个递归树,其中每个递归调用都处于挂起状态;等待更深的呼唤返回。让我们假设最后一个有x.key == k
. 在这种情况下,x
返回该特定信息。但它不会返回给初始调用者,而是返回给正在等待结果的递归调用者。如果返回的值没有再次返回给递归树中上一级的调用者,那么调用者将不会知道这个匹配x
。所以每个调用者都必须取回它x
并将它也返回到递归树的上方。最后,最初的调用者也会得到x
。
推荐阅读
- laravel - Laravel 关系似乎不起作用
- c++ - 为什么我必须在这里使用 dynamic_cast
- c# - C# 使用端口 465 发送电子邮件
- google-cloud-platform - Cloud Run 是否能够对 .ai 域进行域映射?
- python - python中的“IndexError:列表分配索引超出范围”
- sql-server - 计算 SQL Server 中连续行之间的差异
- angular - 类型'可观察的
' 不可分配给类型 'Observable ' 单元测试错误 - python - 在 django 中使用 firebird
- node.js - 如何解决将 reactjs 与节点连接的问题
- c# - 从 MVC 中的控制器 url 打开文件