static void Main(string[] args) 
        { 
            Permutate("12345", "", 0); 
        } 
        static void Permutate(string str, string result, int length) 
        { 
            if (str.Length == length) 
            { 
                Console.WriteLine(result); 
            } 
            for (int i = 0; i < str.Length; i++) 
            { 
                Permutate(str.Remove(i, 1), result + str[i], length); 
            } 
        } 请那位解释下, Permutate(str.Remove(i, 1), result + str[i], length);中 比如 str为12345时 
执行了str.Remove(i, 1)(此时i=0)后str为2345 
接下来执行result + str[i](此时i=0) 
此时的str[i]应该为2才对啊, 
为什么,编译器此时编译的结果为1啊 
大家不信的话可以编译试一下, 
请各位高手指点!在下十分困惑! 

解决方案 »

  1.   

    晕,怎么会?
    第一次执行Permutate时:
    length=0,且lenght!=str.Length.开始执行循环,循环的执行是从0-(str.Length-1)
    第一次i==0,调用 
    Permutate(str.Remove(0,1),result+str[0],length);
    第二次i==1,调用
    Permutate(str.Remove(1,1),result+str[1],length);   
    实际上来说,相当于某某一个字符取出来,添加到result当中。这其实是一个用递归方法进行全排列的问题。
      

  2.   

    str为12345时 
    执行了str.Remove(i, 1)(此时i=0)后str 仍然为12345
    str.Remove(i, 1)返回的是另外的字符串。不信你执行下面的试下。
    string s = "12345";
    string s1 = s.Remove(0, 1);
    Console.WriteLine("s=" + s);
    Console.WriteLine("s1=" + s1);
      

  3.   

    str是不变的,执行了remove仅仅是产生一个新的字符串,而旧的字符串是不变的。