static void Main(string[] args)
        {
            string myst = "ABCDEF";
            List<string> myresult = new List<string>();
            for (int i = 1; i < myst.Length; i++)
            {
                myresult.AddRange(fun(i, myst).ToArray());
            }
            foreach (var a in myresult)
            {
                Console.WriteLine(a);
            }            Console.ReadLine();
        }
        public static List<string> fun(int n,string myst)
        {
          
               
                if (n > 1)
                {
                    List<string> myreturn = new List<string>();
                    foreach (var a in fun(n - 1,myst))
                    {
                        for (int i = a.LastIndexOf(',') + 1; i <a.Length-1; i++)
                        {
                            string retu = a.Insert(i+1 , ",");
                            myreturn.Add(retu);
                        }
                    }
                    return myreturn;
                }
                if (n == 1)
                {                    List<string> myresult = new List<string>();
                    for (int i = 1; i < myst.Length-1; i++)
                    {
                        string result = myst.Insert(i, ",");
                        myresult.Add(result);
                    }
                    return myresult;
                }
                else
                    return null;
                
            
        }

解决方案 »

  1.   

    这个是第一次写 递归算法,思想是没得问题,但是 在写的过程中遇到很多问题  
    例如 :myreturn.AddRang(fun(n-1,myst).toarray());返回这个的时候就编译通过不了??
    想请问各位,递归算法 有哪些限制啊?
      

  2.   

    myreturn.AddRang(fun(n-1,myst).toarray())AddRang 没有返回值
    myreturn 在调用AddRang后已经改变
      

  3.   

     return myreturn.AddRange(fun(n - 1, myst).ToArray());
    不好意思 ,,写错了地方,,是 return 的时候 编译就不能通过了  :报错结果是 void 类型和 string类型 不能相互转换
      

  4.   

    A,BCDEF
    AB,CDEF
    ABC,DEF
    ABCD,EF
    A,B,CDEF
    A,BC,DEF
    A,BCD,EF
    A,BCDE,F
    AB,C,DEF
    AB,CD,EF
    AB,CDE,F
    ABC,D,EF
    ABC,DE,F
    ABCD,E,F
    A,B,C,DEF
    A,B,CD,EF
    A,B,CDE,F
    A,BC,D,EF
    A,BC,DE,F
    A,BCD,E,F
      

  5.   

    return myreturn.AddRange(fun(n - 1, myst).ToArray());
    不好意思 ,,写错了地方,,是 return 的时候 编译就不能通过了 :报错结果是 void 类型和 string类型 不能相互转换?
    另外 在写递归算法的时候 需要注意的要点是什么?
      

  6.   

    myreturn.AddRange(fun(n - 1, myst).ToArray());
    return myreturn;
      

  7.   

    这个和 return myreturn.AddRange(fun(n - 1, myst).ToArray());有什么区别啊?