PDA

View Full Version : la torre di hanoi con la ricorsione


reddevil1987
25-11-2006, 13:09
Ragazzi\e sono ormai due giorni che sto impazzendo con questo esercizio e me ne mancano solo due per consegnarlo... :muro: ... :cry: vi prego se c'è qualche anima gentile che mi può dare una mano lo prego di farlo

se ci sono riuscito penso di aver allegato il testo dell'esercizio,,
comincio a ringraziare fin da ora chiunque risponderà grazie!!!

lucas87
25-11-2006, 14:07
DAi paolo che prima o poi ce la farai

lucas87
25-11-2006, 14:08
cmq paolo sul libro mio ci sta,poi domenica pomeriggio oppure lunedi vieni a casa a roma che te lo copi

mad_hhatter
25-11-2006, 15:01
dai lontani ricordi di fondamenti di info 1 mi pare che si faccia cosi:

hanoi(N,da,a,libero){
sposti un disco da qualche parte;
fai una chiamata ricorsiva con N-1 dischi e rimappando le astine in modo opportuno;
sposti il disco mosso nel primo passaggio sopra la pila sistemata con la chiamata ricorsiva;
}

se ti serve di più cercherò di fare uno sforzo di memoria :D

reddevil1987
25-11-2006, 15:22
grazie mad ma purtroppo io e la ricorsione siamo due cose differenti..(cioè me la cavo anche ma questo esercizio mi ha esaurito) anche perchè hai letto l'output che quel tizio del mio prof. vuole...
se facessi quel picolo sforzo mentale che ti serve per rispolverare questo argomento te ne sarei infiniamente grato....! :help:

mad_hhatter
25-11-2006, 15:52
dunque vediamo...

allora, supponiamo di avere 3 pioli: 0,1,2
e N dischi A,B,C, ...
mappiamo i pioli sui 3 pioli logici DA, A, LIBERO.

il caso base si ha quando devi spostare 2 dischi:
N=2, DA, A, LIBERO (dove la mappatura tra DA, A, LIBERO e 0,1,2 per ora non ci interessa) --> azioni: disco_al_top-LIBERO, secondo_disco-A,disco_al_top-A.

passo ricorsivo (n,DA,A,LIBERO):
[pila_tranne_ultimo_disco-LIBERO]_1, ultimo_disco-A, [pila-A]_2

ora, la scrittura []_x indica una chiamata ricorsiva che va fatta così:
[]_1: hanoi(N-1,DA,LIBERO,A) --> sposta i primi N-1 dischi dal piolo DA al piolo LIBERO usando come appoggio il piolo A
[]_2: hanoi(N-1,LIBERO,A,DA) --> sposta i primi N-1 dischi dal piolo LIBERO al piolo A usando come appoggio il piolo DA

ti resta solo da gestire correttamente le stampre delle azioni, ma credo sia semplice

spero ti sia più chiaro, altrimenti vedo cosa posso fare

reddevil1987
25-11-2006, 16:30
ti ringrazio per il tempo che mi stai concedendo.. ma saranno le tante variabili.. che non riesco a capire come far uscire lettere se inserisco n come numero di dischi.. e anche nel tuo esempio non capisco quegli assegnamenti..
Questo é il settimo homework che faccio ma è la prima volta che incontro tutta questa difficolta..(sarà la ricorsione) ti allego il file.c che ho provato a fare io.. se puoi.. darcci una sistemata che a quanto ho capito penso che non dovresti metterci più di 5 minuti.. grazie mille!!!!...

tomminno
25-11-2006, 16:47
Prova con il codice riportato in:
http://www.to.infn.it/groups/group4/mirror/linux/AppuntiLinux/AL-9.27.131.html

mad_hhatter
25-11-2006, 16:56
class Prova{
public static void main(String[] args){
//int n = 3;

hanoi(1,0,0,2,1);
}

static void hanoi(int n, int da, int a, int tmp){
if (n == 1){
System.out.println(""+da+"-"+a);
return;
}

hanoi(n-1,da,tmp,a);
System.out.println(""+da+"-"+a);
hanoi(n-1,tmp,a,da);
return;
}

static void hanoi(int n_top, int n_bottom, int da, int a, int tmp){
if (n_top-n_bottom == 0){
System.out.println(""+n_top+"::"+da+"-"+a);
return;
}

hanoi(n_top,n_bottom+1,da,tmp,a);
System.out.println(""+n_bottom+"::"+da+"-"+a);
hanoi(n_top,n_bottom+1,tmp,a,da);
return;
}
}


te lo posto in java perchè vado meglio, ma è uguale.
la versione con parametri n,da,a,tmp descrive una mossa come piolo_da-piolo_a

l'altra versione fornisce le mosse con il formato: numero_disco:: piolo_da-piolo-a

mad_hhatter
25-11-2006, 16:57
poi ti basta mappare i numeri da 0 a N nelle corrispondenti lettere

reddevil1987
25-11-2006, 17:04
Ti ringrzio tantissimo!!!!!!!!!!!!!!!!!
mi sti risparmiando di dover fare la prva di laboratorio a gennaio.. perchè basta un homework non mandato che bruia tutto il lavoro !! garzie ancora! ;)

mad_hhatter
25-11-2006, 17:18
in bocca al lupo