Il codice è sbagliato. Quello corretto è:
codice:
hanoi(n, start, end, app)
  if (n == 0) return;
  hanoi(n-1, start, app, end);
  move(start, end);
  hanoi(n-1, app, end, start);
Per vedere che stampa gli spostamenti esatti si può procedere per induzione. La dimostrazione è semplice e va pari pari con la dimostrazione della correttezza dell'algoritmo.