经典的递归问题,以前好长时间都没有理解,这里最好自己动手比划比划。
move()函数中的形参代表A、B、C三个柱子 。
附上图解:
1.第一步:先把前n-1个盘子从A柱子移到B柱子(借助C柱子)
2.把第n个盘子从A柱子直接移到C柱子
3.再把前n-1个盘子从B柱子借助A柱子移到C柱子上
递归完毕,已完成n个盘子的移动过程。
/*
目的:将n个盘子从A柱子移到C柱子,且小盘子只能在大盘子上面。
*/
#include<stdio.h>
int t=0;
void move(int n, int A, int B, int C)
{
if(n==1)
{
printf("第%d个盘子从%c移到%c\n",n,A,C);
}
else
{
move(n-1, A, C, B);
printf("第%d个盘子从%c移到%c\n",n,A,C);
move(n-1, B, A, C);
}
}
int main()
{
int n;
char c1 = 'A', c2 = 'B', c3 = 'C';
printf("请输入要移动盘子的个数: ");
scanf("%d",&n);
move(n,c1,c2,c3);
}