日期:2014-05-18 浏览次数:21065 次
int num = UserNum(2, 0);
     protected static int UserNum(string user, int n)
        {
            string boolUser = new Appellation().GetUserID(user);
            if (boolUser != "")
            {
                IList<AppellaUserInfo> list = new Appellation().GetUser(user);
                string userID = "";
                foreach (AppellaUserInfo au in list)
                {
                    AppellaUserInfo appUser = new Appellation().UserInfo(au.SpouseID);
                    n++;
                    userID += au.UserID + ",";
                }
                userID = userID.Substring(0, userID.Length - 1);
                UserNum(userID, n);
            }
            return n;
        }
UserNum(userID, n);
------解决方案--------------------
递归递归,本来就是如此的。你跟踪的东西本来就是由UserNum(userID, n);调用的,返回了当然还是在它那里。
而且你的递归程序有错,不管递归多少次,返回的都是第一次调用UserNum时给出的参数n。不会有别的结果。
因为那个返回值根本就不受任何条件和环境的限制,直接被你写死了: return n;
正确的递归程序在进入时的第一件事情就是判断递归是否应该结束了。如果该结束则返回需要的结果,否则计算各项需要计算的,改变各项需要改变的,然后开始递归。递归后的值或者直接传递给调用者,或者在加工之后再传递给调用者。
------解决方案--------------------
楼主可以考虑一下你的那个取值真的只有递归才可以解决吗?