【发布时间】:2013-01-08 14:28:07
【问题描述】:
昨天我向this question 询问了关于使用递归子函数的问题,其中传入的参数是实际所需的输出,并得到了建议,我宁愿创建一个递归函数,并将所需的输出作为返回值。
这两种解决方案如下所示(在本例中,获取树视图中某个节点下的所有选中节点,返回为List(Of Treenode):
递归子:
Sub GetAllCheckedNodes(ByVal tn As TreeNode, ByVal NodesList As List(Of TreeNode))
If tn.Checked Then NodesList.Add(tn)
For Each nd As TreeNode In tn.Nodes
GetAllCheckedNodes(nd, NodesList)
Next
End Sub
期望的输出是NodesList,因此使用如下:
Dim CheckedNodes as New List(Of Treenode)
GetAllCheckedNodes(MyTreeNode, CheckedNodes)
此时,Checkednodes 将被填充。
递归函数:
Function GetAllCheckedNodes(ByVal tn As TreeNode) As List(Of TreeNode)
Dim RetVal As New List(Of TreeNode)
If tn.Checked Then RetVal.Add(tn)
For Each nd In tn.Nodes
RetVal.AddRange(GetAllCheckedNodes(tv, nd))
Next
Return RetVal
End Function
将按如下方式使用:
Dim CheckedNodes as List(Of Treenode) = GetAllCheckedNodes(MyTreeNode)
所以我的问题是:
- 显然,该函数似乎更容易理解,但从编程的角度来看,还有其他理由使用它吗?
- 在递归函数中,您在每次迭代时都声明一个新的
List(Of TreeNode),而您在Sub 中使用相同的列表...这不会使sub 更有效率吗?而且,如果是这样,是否有时会创建如上所示的递归子是内存管理的更好解决方案?还是从不??
谢谢!
【问题讨论】: