This might help you somewhat. Probably
best to do this with pencil and paper.
Code:
#include <stdio.h>
#define N 3
#define NR_STACKS 3
static int disk_stack[NR_STACKS] = { N, 0, 0 };
int max(int a[], int n)
{
int i;
int greatest = a[0];
for (i = 1; i < n; ++i)
if (a[i] > greatest)
greatest = a[i];
return greatest;
}
void print_disk_stack()
{
int i, j;
j = max(disk_stack, NR_STACKS);
for (; j > 0; --j) {
for (i = 0; i < NR_STACKS; ++i) {
if (disk_stack[i] >= j)
putchar('*');
else
putchar(' ');
}
putchar('\n');
}
putchar('\n');
}
void hanoi(int src, int aux, int dst, int num)
{
if (num == 1) {
print_disk_stack();
printf("(%d, %d)\n", src, dst);
disk_stack[src]--;
disk_stack[dst]++;
} else {
hanoi(src, dst, aux, num-1);
hanoi(src, aux, dst, 1);
hanoi(aux, src, dst, num-1);
}
}
int main(void)
{
hanoi(0, 1, 2, N);
print_disk_stack();
return 0;
}