递归算法无法中途跳出
/// <summary>
/// 检查指定节点下是否存在被选中的节点
/// </summary>
/// <param name="tn"></param>
/// <returns></returns>
private bool IsItemHasChecked(TreeNode tn)
{
if (tn.Nodes.Count > 0)
{
for (int i = 0; i < tn.Nodes.Count; i++)
{
if (tn.Nodes[i].Checked == true)
return true;
else
IsItemHasChecked(tn.Nodes[i]):
}
}
return false;
}
具体业务场景见:http://blog.csdn.net/lusend/article/details/8350478,说说递归算法退出的原理
[解决办法]
递归退出其实只是在满足某种条件之后不再继续递归调用,同时层层return,直到完全结束该方法为止
[解决办法]
中途return无用,只有不满足 tn.Nodes.Count>0才会退出
[解决办法]
你应该去看看递归的原理 return 是不起作用的,只有满足递归条件才会退出,你return 的只是他的一个副本而已
[解决办法]
/// 检查指定节点下是否存在被选中的节点
/// </summary>
/// <param name="tn"></param>
/// <returns></returns>
private bool IsItemHasChecked(TreeNode tn)
{
for (int i = 0; i < tn.Nodes.Count; i++)
{
if (tn.Nodes[i].Checked == true)
return true;
else
{
if (IsItemHasChecked(tn.Nodes[i]) == true)
return true;
}
}
return false;
}
代码没有测过,但是差不多应该是这个逻辑了,另外参数tn没有判断是否为null