La cuestion es que el problema de mover N discos desde A hasta C se puede reducir a mover N-1 discos desde A hasta B y luego mover esos N-1 discos desde B hasta C, usando siempre el tercer disco como intermediario.
Entonces, para mover N-1 discos desde A hasta B, hay que mover N-2 discos desde A hasta C y luego los N-2 discos desde C hasta B...
etc etc hasta que sólo hay que mover un disco, el cual va directo de una torre a otra (el programa no lo distingue y lo mueve en dos pasos pero no haría falta)
Y así es como funciona, un típico programa recursivo aunque en este caso con dos llamadas. Si se te hace dificil entenderlo de cabeza, lo mejor es usar papel y lapiz para escribir los pasos. No es coña
.
S!