经典的递归问题,以前好长时间都没有理解,这里最好自己动手比划比划。
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); }