看代码理解吧:
/*************************************************************************
> File Name: hanoi.c
> Author: Netcan
> Mail: 1469709759@qq.com
> Created Time: 2015/1/23 16:32:17
************************************************************************/
/* 盘子从上往下编号,1到n
* 当 n == 1 的时候,
* 直接将盘中从“A”柱移到“C”柱
* 当 n >= 2 的时候,
* 先将前n-1个盘子从“A”柱借助“C”柱移到“B”柱
* 然后,将第n个盘子从“A”柱移到“C”柱
* 最后,将“B”柱上n-1个盘子从“B”柱借助“A”柱移到“C”柱
*/
void hanoi(int n, char A, char B, char C); // 表示n个盘子从“A”柱借助“B”柱移到“C”柱
#include<stdio.h>
int main()
{
int n;
printf("输入盘子数量:");
scanf("%d",&n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
void hanoi(int n, char A, char B, char C)
{
static int steps = 0;
if ( 1 == n )
printf("第%d步: 将编号为%d的盘子从%c柱移到%c柱\n", ++steps, n, A, C);
else {
hanoi(n-1, A, C, B);
printf("第%d步: 将编号为%d的盘子从%c柱移到%c柱\n", ++steps, n, A, C);
hanoi(n-1, B, A, C);
}
return;
}
运行图: