算法思想:(1)将A上的m-1个盘借助C移到B上

(2)将A上的最后一个大盘移到C上

(3)将B上的m-1个盘通过A移到C上

基于以上思想可以采用递归方法,将设需要移动n个盘,则总共需要移动2n-1次。

代码如下:

 1 #include<stdio.h>
 2 void hanoi(int m,char one,char two,char three)
 3 {
 4     void move(char,char);              //定义move函数
 5     if(m==1)        //当m为1时直接将盘子从A移到C
 6         move(one,three);
 7     else                    //递归执行
 8     {
 9         hanoi(m-1,one,three,two);
10         move(one,three);
11         hanoi(m-1,two,one,three);
12     }
13 }
14 void move(char x,char y)       //用于展示执行过程
15 {
16     printf("%c-->%c\n",x,y);
17 }
18 int main()
19 {
20     int m;
21     char A,B,C;
22     printf("请输入盘子数目:");
23     scanf("%d",&m);
24     hanoi(m,'A','B','C');
25 }

运行结果如下

C语言用递归法实现汉诺塔_递归

 

 注意:因为移动次数是2的n次幂,所以每增加一个移动次数就会成倍增加,所以不要输入太大的数,不然系统执行时间变长。