日期:2014-05-18  浏览次数:20925 次

递归的取值问题。
方法一
C# code

int num = UserNum(2, 0);


调用的方法:
C# code

     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;
        }



查到最后得出想要的了。可是再往下跳一步。怎么又返回去了。一直这样。到最后得出的是最初第一次进来得的值。怎么获取最后的值。
急需。今天第一次用递归。所以原理还不怎么动。希望大家快速解答。
我只想获取我想要的最后的值。

------解决方案--------------------
递归是不断的压入栈,最后一次压入栈之后在判断是否达到结束条件,然后将值带入不断弹出栈结果。
最后一次弹出栈就是你要的结果了。
所以递归很多情形稍不留意易引起StackOverFlow
------解决方案--------------------
C# code
UserNum(userID, n);

------解决方案--------------------
递归递归,本来就是如此的。你跟踪的东西本来就是由UserNum(userID, n);调用的,返回了当然还是在它那里。

而且你的递归程序有错,不管递归多少次,返回的都是第一次调用UserNum时给出的参数n。不会有别的结果。

因为那个返回值根本就不受任何条件和环境的限制,直接被你写死了: return n;

正确的递归程序在进入时的第一件事情就是判断递归是否应该结束了。如果该结束则返回需要的结果,否则计算各项需要计算的,改变各项需要改变的,然后开始递归。递归后的值或者直接传递给调用者,或者在加工之后再传递给调用者。
------解决方案--------------------
楼主可以考虑一下你的那个取值真的只有递归才可以解决吗?