/*
公式:F(n)[A(B)C] = F(n-1)[A(C))B] & F(1)[A(B)C] & F(n-1)[B(A)C]
所有n层,挪:A→C,相当于:
把上面的n-1层,挪:A→B;
把底下剩下的最大的1层,挪:A→C;
把之前挪到B的n-1层,挪:B→C;
*/
#include <stdio.h>
int stepsum=0; //计数器
void move(char ch1,char ch2,char ch3) //移动:从1到3(借/跳过2)
{
printf("%c -> %c\n",ch1,ch3);
stepsum++;
}
void hannuota(int i,char ch1,char ch2,char ch3) //总i层,从1到3(借2)
{
if (i == 1)
move(ch1,ch2,ch3);
else
{
hannuota(i-1,ch1,ch3,ch2); //i-1,从1到2(借3)
hannuota(1,ch1,ch2,ch3); //1,从1到3(借2)
hannuota(i-1,ch2,ch1,ch3); //i-1,从2到3(借1)
}
}
int main()
{
int i;
printf("请输入汉诺塔层数:\n");
scanf("%d",&i);
hannuota(i,'A','B','C');
printf("一共需要%d步!\n",stepsum);
return 0;
}