递归(hanoid tower)

问题:汉诺塔(港台:河内塔)是根据一个传说形成的数学问题:
     有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
     每次只能移动一个圆盘;
     大盘不能叠在小盘上面。
     提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。
     问:如何移?最少要移动多少次?
解答:(C#)
namespace hanoi_tower
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine("Please insert a positive integer:");
            string a = Console.ReadLine();
            int n = Convert.ToInt32(a);
            int count = 0;
            Program step = new Program();
            count = step.hanoi('A', 'B', 'C', n, ref count);
            Console.WriteLine(count);
            Console.ReadKey();
        }
        public int hanoi(char a,char b,char c,int n,ref int count){
            if (n == 1)
            {
                Console.WriteLine("Move disk {0} from {1} to {2}.", n, a, c);
                return 1;  
            }
            else {
                count=hanoi(a, c, b, n - 1,ref count);
                Console.WriteLine("Move disk {0} from {1} to {2}",n,a,c);
                count+=1;
                count += hanoi(b, a, c, n - 1,ref count);
            }
            return count;
    
    }
    }
}                                                                                                                    

需要注意的有:1.Readline()返回值类型为string,需要转化为需要的type。
                方法:   string str=Console.ReadLine();//读入一行
                        int a = Convert.ToInt32(str);//第一种转换方式
                        int b = int.Parse(str);//第二种转换方式
                        int c;
                        int.TryParse(str, out c);//第三种转换方式
             2.建立类的实例来引用method。
             3.递归的初始化。
             4.疑问:count得到的值能及时返回到函数中吗?
              :用 ref:http://msdn.microsoft.com//library/14akc2c7.aspx
              
              用内存的角度分析(待续):pass by value


















你可能感兴趣的:(递归(hanoid tower))