日期:2014-05-17  浏览次数:21070 次

递归算法无法中途跳出
        /// <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)
       &nbs