C#递归函数求解汉诺塔

当盘子的个数为n时,移动的次数应等于2^n – 1。

首先把三根柱子按顺序排成品字型,把所 有的圆盘按从大到小的顺序放在柱子

上,根据圆盘的数量确定柱子的排放顺序:

若n为偶数,按顺时针方向依次摆放A B C;

若n为奇数,按顺时针方向依次摆放 A C B。

 

{
//第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔
static int i=1;//记录步数

static void move(int n,char from,char to) //将编号为n的盘子由from移动到to
{
Console .WriteLine("第{0}步:将{1}号盘子{2}---->{3}\n",i++,n,from,to);
}

static void hanoi(int n,char from,char denpend_on,char to)//将n个盘子由初始塔移动到目标塔(利用借用塔)
{
if (n==1)
move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地
else
{
hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
move(n,from,to); //将剩下的一个盘子移动到目的塔上
hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
}
}

static void Main(string [] args)
{
Console .WriteLine("请输入盘子的个数:\n");
int n=Convert .ToInt32 (Console.ReadLine ());
char x='A',y='B',z='C';
Console .WriteLine("盘子移动情况如下:\n");
hanoi(n,x,y,z);
}

}

posted @ 2016-04-25 15:14  沙瑞金书记  阅读(243)  评论(0编辑  收藏  举报