#include<stdio.h>
int layer=0;
int main()
{
int n;
void hanoi(int n,char x,char y, char z);
printf("Hanoi tower\nInput number: ");
scanf("%d",&n);
printf("The step to move %2d disks:\n",n);
hanoi(n,'A','B','C');
return 0;
}
void hanoi(int n,char x,char y,char z)
{
void indent(int layer);
if(n==1)
{
indent(layer);
printf("hanoi(%d, %c, %c, %c) return\n",n,x,y,z);
layer--;
}
else
{
indent(layer);
printf("hanoi(%d, %c, %c, %c) invoke hanoi(%d, %c, %c, %c)\n",n,x,y,z,n-1,x,z,y);
layer++;
hanoi(n-1,x,z,y);
indent(layer);
printf("hanoi(%d, %c, %c, %c)move: ",n,x,y,z);
printf("%c-->%c\n",x,z);
indent(layer);
printf("hanoi(%d, %c, %c, %c) invoke hanoi(%d, %c, %c, %c)\n",n,x,y,z,n-1,y,x,z);
layer++;
hanoi(n-1,y,x,z);
indent(layer);
printf("hanoi(%d, %c, %c, %c) return\n",n,x,y,z);
layer--;
}
}
void indent(int layer)
{
int i;
for(i=1;i<=2*layer;i++)
printf("%c",' ');
}