Función hanoi de Crockford (de "The Good Parts") [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Cómo funciona el algoritmo recursivo para Towers of Hanoi? 3 respuestas

En este momento estoy leyendo el libro de Douglas Crockford, y las torres de la función hanoi están un poco sobre mi cabeza. Incluso con el registro de cosas en la consola, no pude entender realmente lo que está sucediendo. Aquí está la función con mis adiciones:

var hanoi = function (disc, src, aux, dst) {
  console.log(disc);
  console.log(src, dst);    
  if (disc > 0) {
    hanoi(disc - 1, src, dst, aux);
    console.log('Move disc ' + disc + ' from ' + src + ' to ' + dst);
    hanoi(disc - 1, aux, src, dst);
  }
}

hanoi(3, 'Src', 'Aux', 'Dst');

Esto da como resultado lo siguiente:

3
Src Dst
2
Src Aux
1
Src Dst
0
Src Aux
Mueva el disco 1 de Src a Dst
0
Aux Dst
Mueva el disco 2 de Src a Aux
1
Dst Aux
0
Dst Src
Mueva el disco 1 de Dst a Aux
0
Src Aux
Mueva el disco 3 de Src a Dst
2
Aux Dst
1
Aux Src
0
Aux Dst
Mueva el disco 1 de Aux a Src
0
Dst Src
Mueva el disco 2 de Aux a Dst
1
Src Dst
0
Src Aux
Mueva el disco 1 de Src a Dst
0
Aux Dst

Y estoy perdido en un punto temprano. En la línea 6 de los resultados, ¿cómo puede volver de Src Aux a Src Dst?

¿Y cómo puede volver a aumentar el número de discos una vez que ha alcanzado 0, cuando la función solo se llama a sí misma usando "disco - 1"?

Respuestas a la pregunta(2)

Su respuesta a la pregunta