问题描述:
有一个梵塔,塔内有三个座A、B、C,A座上有诺干个盘子,盘子大小不等,大的在下,小的在上(如图)。
把这些个盘子从A座移到C座,中间可以借用B座但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘
子始终保持大盘在下,小盘在上。
描述简化:把A柱上的n个盘子移动到C柱,其中可以借用B柱。
大一学习了C语言,当时不是很理解递归,这个学期在《算法设计与分析》课程上再次学习了递归,现在算是理解了,
1 #include<stdio.h> 2 3 void move(int n,char a,char b,char c) 4 { 5 if(n==1) 6 ┊ printf("\t%c->%c\n",a,c); //当n只有1个的时候直接从a移动到c 7 else 8 { 9 ┊ move(n-1,a,c,b); //第n-1个要从a通过c移动到b 10 ┊ printf("\t%c->%c\n",a,c); 11 ┊ move(n-1,b,a,c); //n-1个移动过来之后,b通过a移动到c 12 } 13 } 14 15 main() 16 { 17 int n; 18 printf("请输入要移动的块数:"); 19 scanf("%d",&n); 20 move(n,'a','b','c'); 21 } 22 /* 23 请输入要移动的块数:4 24 ┊ a->b 25 ┊ a->c 26 ┊ b->c 27 ┊ a->b 28 ┊ c->a 29 ┊ c->b 30 ┊ a->b 31 ┊ a->c 32 ┊ b->c 33 ┊ b->a 34 ┊ c->a 35 ┊ b->c 36 ┊ a->b 37 ┊ a->c 38 ┊ b->c 39 Press any key to continue . . .*/