PDA

Visualizza la versione completa : [C/C++]: Le Torri di Hanoi


f@nt@m@n
10-09-2006, 20:44
Qualcuno gentilmente mi può spiegare come lavora la funzione tower??


#include <stdio.h>
void tower (int, int, int, int);

int main()
{
int n;

printf ("Enter the starting number of disks: ");
scanf ("%d", &n);
tower (n, 1, 3, 2);

system ("pause");
return 0;
}
void tower (int c, int start, int end, int temp)
{
if (c == 1){
printf ("%d --> %d\n", start, end);
return;}

tower (c - 1, start, temp, end);

printf ("%d --> %d\n", start, end);

tower (c - 1, temp, end, start);
}

f@nt@m@n
11-09-2006, 10:42
Non mi aiuta nessuno?:cry:

matrics
11-09-2006, 19:14
Originariamente inviato da f@nt@m@n
Non mi aiuta nessuno?:cry:
Tower fa quello che fai per spostare gli anelli in minor tempo possibile 2^n(e chiamalo minore possibile...)

Usa tre aste start end e tmp
Via via che va avanti ricorsivamente inverte le aste per inserire gli anelli al punto giusto.
Prova ad eseguire il codice manualmente, solitmante faccio così se non capisco :)
Magari ti disegni proprio le 3 torri e gli anelli

f@nt@m@n
11-09-2006, 21:34
Dunque, se poniamo n = 3, il risultato sarà
1 -> 3
1 -> 2
3 -> 2
1 -> 3
2 -> 1
2 -> 3
1 -> 3
Credo sia così.
Il caso base è c == 1. Quindi si passerà a

tower (c - 1, start, temp, end);
che restituirà START-END, START-TEMP e END-TEMP (perchè??)

printf ("%d --> %d\n", start, end);
stamperà la quarta riga e

tower (c - 1, temp, end, start);
farà il resto. :master: Non capisco ancora bene come funzionino le due chiamate ricorsive. :master:
Se non sbaglio l'ordine in cui restituiscono i parametri (1-3, 1-2, 3-2) è lo stesso, ma perchè quell'ordine?

Loading