递归调用理解(C#)

来源:互联网 发布:spss下载mac版 编辑:程序博客网 时间:2024/06/06 00:14

 

递归是一种编程技术,一个方法调用它本身;

 

比较经典的有:遍历迷宫,汉诺塔,N的阶乘,Fabonacci...

 

下面就举汉诺塔为例子介绍

 

C# Code:

 

class TowerofHanoi    {        private int totalDisks;        public TowerofHanoi(int disk)        {            totalDisks = disk;        }        public void Solve()        {         MoveTower(totalDisks, 1, 3, 2);        }        private void MoveTower(int numDisks, int start, int end, int temp)//第一次进来,(start=1,end=3,temp=2)        {            if (numDisks == 1)                                            //第二次进来(start=1,end=2,temp=3)                MoveOneDisk(start, end);                                  //第三次进来(start=1,end=3,temp=2)            else                                                          //第四次进来(start=3,end=2,temp=1)            {                                MoveTower(numDisks - 1, start, temp, end);//第一次调用本身:(1,2,3);第二次调用本身:(1,3,2);在初次要移动第二块的时候返回到这里(1,3,2),                   MoveOneDisk(start, end);                  //且从这个函数移动第二块,此时(start=1,end=2,temp=3)                MoveTower(numDisks - 1, temp, end, start);//第三次调用本身:(3,2,1)                                                           }        }        private void MoveOneDisk(int start,int end)           {            Console.WriteLine ("Move one disk from:" +start +" to " + end );        }    }class Program    {        static void Main(string[] args)        {            int  n = int.Parse (Console.ReadLine());            TowerofHanoi towers = new TowerofHanoi(n);            towers.Solve();            Console.ReadKey();        }    }