昨天我问了这个问题,关于使用递归子函数,传入的参数是实际所需的输出,并得到建议,而不是使用所需的输出作为返回值的递归函数。
这两个解决方案如下所示(在此示例中,要获取树视图中某个节点下的所有已检查节点,返回为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 更有效地使用内存吗?并且,如果是这样,是否有时会创建如上所示的递归子代码是更好的内存管理解决方案?还是从来没有??
谢谢!