class Towers
    {
        public static void Main()
        {
            towers(4, 'a', 'c', 'b');
            Console.ReadLine();
        }        public static void towers(int n, char fromPeg, char toPeg, char auxPeg)
        {
            if (n == 1)
            {
                Console.WriteLine("move disk 1 from peg " + fromPeg + " to peg " + toPeg);
                return;
            }            towers(n - 1, fromPeg, auxPeg, toPeg);            Console.WriteLine("move disk " + n + " from peg " + fromPeg + " to peg " + toPeg);            towers(n - 1, auxPeg, toPeg, fromPeg); 
        }
    }这个程序分三个步骤完成,第一步,执行第一个递归函数,第二步执行输出,第三步执行第三个递归函数,第一步是要完成n-1个塔向B柱转移,分解为n-2个塔向c转移(函数1),再把n-1向b柱转移(输出语句2),再把n-2向b柱转移(函数3),这个思想能搞明白,但每次调用的参数规律不知是不是,第一个函数acb,abc,acb,abc……
第二个函数是bca,?

解决方案 »

  1.   

    class Towers
        {
            public static void Main()
            {
                towers(4, 'a', 'c', 'b');
                Console.ReadLine();
            }        public static void towers(int n, char fromPeg, char toPeg, char auxPeg)
            {
                if (n == 1)
                {
                    Console.WriteLine("move disk 1 from peg " + fromPeg + " to peg " + toPeg);
                    return;
                }            towers(n - 1, fromPeg, auxPeg, toPeg);            Console.WriteLine("move disk " + n + " from peg " + fromPeg + " to peg " + toPeg);            towers(n - 1, auxPeg, toPeg, fromPeg); 
            }
        }这个程序分三个步骤完成,第一步,执行第一个递归函数,第二步执行输出,第三步执行第三个递归函数,第一步是要完成n-1个塔向B柱转移,分解为n-2个塔向c转移(函数1),再把n-1向b柱转移(输出语句2),再把n-2向b柱转移(函数3),这个思想能搞明白,但每次调用的参数规律不知是不是,第一个函数acb,abc,acb,abc……
    第二个函数是bca,acb,bca,acb……
      

  2.   

    看看定义先:
    http://zhidao.baidu.com/question/5919332.html递归本来就是一种倒推的方式来逐步计算。
      

  3.   

    我也考虑过递归,原来跟踪过,以为懂了,但看MSDN那个菲波那切的例子才发现原来懂得不够,菲的那个例子是挂起的方法与菲所计算的累加数一样多!好吓人啊.
      

  4.   

    你可以利用代码输出看看。
    towers(4, ‘a’, 'c', 'b');
    towers(3, ‘a’, 'b', 'c');
    towers(2, ‘a’, 'c', 'b');
    towers(1, ‘a’, 'b', 'c');
    Console.WriteLine("move disk 1 from peg a to peg b");
    Console.WriteLine("move disk 2 from peg a to peg b");
    towers(1, ‘b’, 'c', 'a');
    Console.WriteLine("move disk 1 from peg b to peg c");
    ...