首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归方法:单个元素参数还是元素集合?

递归方法:单个元素参数还是元素集合?
EN

Stack Overflow用户
提问于 2010-02-14 06:31:53
回答 7查看 180关注 0票数 1

我有一个关于实现递归方法的两种不同方法的优点的问题。我一直遵循版本1的方法,即接受单个Node参数,但最近我遇到了版本2中使用的样式,它接受节点的集合。

考虑下面的Node类,以及2个版本的along方法:

代码语言:javascript
复制
class Node
{
    public List<Node> children = new List<Node>();
    // other data members 
}

版本1接受单个节点参数:

代码语言:javascript
复制
Visit(Node n)
{
  DoSomethingUsefulWith(n);

  foreach (Node child in n.children)
    Visit(child);
}

版本2接受节点集合:

代码语言:javascript
复制
Visit(List<Node> nodes)
{
  foreach (Node n in nodes)
  {
    DoSomethingUsefulWith(n);
    Visit(n.children);
  }
}

使用一种表单比使用另一种表单在风格上有什么好处吗?选择是否应该仅仅基于您是从单个Node开始还是从一个节点集合开始,即使在这两种情况下使用任何一种方法版本都是微不足道的?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-14 06:41:10

我不会实现版本2,总是实现版本1。

版本2基本上是for-each循环中的版本1

如果您以后决定使用一个参数调用该方法,则始终可以重用版本1。

如果只有版本2和一个节点,则必须创建一个虚拟列表才能使用版本1。

我不认为性能在这里是一个真正的问题。这两种方法都有一个(通过引用)参数,它们应该使用大约相同的内存量。

然而,.NET也许能够更好地优化这两者中的一个。分析这两种方法以确保安全。

票数 2
EN

Stack Overflow用户

发布于 2010-02-14 06:42:54

我更喜欢采用单个节点的签名,因为如果我只想对该节点及其子节点执行操作,那么我就不必构造一个人工列表。它很容易在节点列表上使用,而且您只需迭代列表并将其应用于每个节点。

票数 2
EN

Stack Overflow用户

发布于 2010-02-14 06:36:41

您应该在递归函数中传递尽可能少的参数(甚至考虑到专用于您所使用的类型的内存大小)。这是我遵循的一般规则。如果你传递一些大的结构,你可能会耗尽内存。如果你使用的是引用类型,这不是问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2259348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档