关于递归转换成非递归或尾递归

Doson 2014-11-24 04:59:13

public string AddTreeView(decimal parentId)
{
var List = SysTreeViewService.Find(" from SYSTREEVIEW where PARENTNODEID = " + parentId).ToList().OrderBy(a => a.FLAGID);
if (List.Count() > 0)
{
LeftList.Append("<ul>");
foreach (var item in List)
{
LeftList.Append("<li><a onclick=\"get(" + item.PKID + ")\" tname=\"chkSelect\" tvalue=" + item.PKID + " >" + item.NODETEXT + "(" + item.FLAGID + ")</a>");
AddTreeView(item.PKID);
LeftList.Append("</li>");
}
LeftList.Append("</ul>");
}
return LeftList.ToString();
}


递归代码如上,请问这个怎么转换成非递归或者尾递归
...全文
228 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-11-24
  • 打赏
  • 举报
回复
思路(伪代码) List<List<Node>> result = new List<List<Node>>(); result.Add(LoadTopNodes()); while (result[result.Count - 1].Count != 0) { result.Add(new List<Node>()); foreach (Node node in result[result.Count - 2]) { result[result.Count - 2].Add(LoadSubModes(node)); } }
Doson 2014-11-24
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
如果递归深度不超过1000,你的这种程序完全没有必要改成难以读懂和维护的迭代程序。 如果一定要改迭代,不一定手工改成特别优化的,可以先考虑c#的简洁的“迭代器”技术。
数据现在已经超过2000条了
  • 打赏
  • 举报
回复
如果递归深度不超过1000,你的这种程序完全没有必要改成难以读懂和维护的迭代程序。 如果一定要改迭代,不一定手工改成特别优化的,可以先考虑c#的简洁的“迭代器”技术。

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧