从左到右 A B C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面.如果有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号 1(小),2(中),3(大), 后面的原理解析引用这里的编号.
1.假设只有一个盘子的时候, 盘子数量 N=1
只有一个步骤 将第1个盘子从A移动到C, 为了对比方便我这样来描述这个步骤:
步骤 盘子编号 从柱子移动 移动到柱子
1 1 A C
2. 如果有两个盘子, 盘子数量 N = 2
步骤 盘子编号 从柱子移动 移动到柱子
1 1 A B
2 2 A C
3 1 B C
3. 如果有三个盘子, 盘子数量 N = 3
步骤 盘子编号 从柱子移动 移动到柱子
1 1 A C
2 2 A B
3 1 C B
4 3 A C
5 1 B A
6 2 B C
7 1 A C
代码如下:
#include <stdio.h>
void hanoi( int n, char a,char b, char c )
{
if( n > 0 )
{
if( n == 1 ) //如果只有一个盘子
{
printf( "%c->%c\n",a,c );
}
else //盘子大于一进行递归
{
hanoi( n-1 ,a,c,b ); //将n-1个盘子从a借助c移至b
printf( "%c->%c\n",a,c ); //将最底层盘子从a移至c
hanoi( n-1,b,a,c ); //将n-1个盘子从b借助a移至c
}
}
}
int main()
{
hanoi( 2,'a','b','c' );
return 0;
}