Resolviendo el problema de las torres de Hanoi

Estudiando C, me tope con el problema de las torres de hanoi.

El juego, en su forma más tradicional, consiste en tres varillas verticales. En una de las varillas se apila un número indeterminado de discos (elaborados de madera) que determinará la complejidad de la solución, por regla general se consideran ocho discos. Los discos se apilan sobre una varilla en tamaño decreciente. No hay dos discos iguales, y todos ellos están apilados de mayor a menor radio en una de las varillas, quedando las otras dos varillas vacantes. El juego consiste en pasar todos los discos de la varilla ocupada (es decir la que posee la torre) a una de las otras varillas vacantes. Para realizar este objetivo, es necesario seguir tres simples reglas:

  1. Sólo se puede mover un disco cada vez.
  2. Un disco de mayor tamaño no puede descansar sobre uno más pequeño que él mismo.
  3. Sólo puedes desplazar el disco que se encuentre arriba en cada varilla.

(mas info en wikipedia, http://es.wikipedia.org/wiki/Torres_de_Hanoi )

Y la premisa del ejercicio, era generar un programa genérico, al que uno le intoduzca la cantidad de discos, el asta de origen, el asta de destino y un asta para usar como temporal y este imprima los pasos para resolver el puzzle. Por ejemplo, para mover 4 discos del asta nº1 a la tercera, deberiamos hacer:

1 -> 2
1 -> 3
2 -> 3
1 -> 2
3 -> 1
3 -> 2
1 -> 2
1 -> 3
2 -> 3
2 -> 1
3 -> 1
2 -> 3
1 -> 2
1 -> 3
2 -> 3

Mi solución: http://pastebin.com/f6bdcb09a