Torre di hanoi in c. Dubbi su alcuni passaggi.

di il
5 risposte

Torre di hanoi in c. Dubbi su alcuni passaggi.

Ho dei dubbi su unpassaggio che utilizza la ricorsione per risolvere la torre di hanoi in un programma in c.

sapendo che:

numDischi=3
pioloDiPartenza=1
pioloDiArrivo=3
pioloTemporaneo=2

e svilluppando nel seguente modo:
void muovi_dischi(int numDischi,int pioloDiPartenza,int pioloDiArrivo,int pioloTemporaneo){
	
	if(numDischi==1){
		printf("Muovi un disco dal piolo %d al piolo %d\n",pioloDiPartenza, pioloDiArrivo);
	}else {
    	muovi_dischi(numDischi-1, pioloDiPartenza, pioloTemporaneo,pioloDiArrivo);
		printf("Muovi un disco dal piolo %d al piolo %d\n\n",pioloDiPartenza, pioloDiArrivo);
    	muovi_dischi(numDischi-1,pioloTemporaneo, pioloDiArrivo, pioloDiPartenza );
  	}
}

il problema riesce senza problemi.Il fatto è che non capisco cosa succede ad un certo punto.

entrati nella funzione mi ritrovo subito dentro l'else dove la funzione si richiama subito da sola(2,1,2,3)

l'if non è rispettato e la funzione sfa quello che ha fatto prima(1,1,2,3)

adesso l'if è rispettato e stampa 1->3

e adesso? non capisco cosa succede ora ,dove si posiziona il programma per continuare e sopratutto come continui.

Grazie in anticipo a chi mi darà delucidazioni.

5 Risposte

  • Re: Torre di hanoi in c. Dubbi su alcuni passaggi.

    Continua con il return (anche se non l'hai scritto, c'è).
  • Re: Torre di hanoi in c. Dubbi su alcuni passaggi.

    Continuo a no capire cosa accade dopo e come faccia a stampare gli altri risultati. Potresti essere più preciso?
  • Re: Torre di hanoi in c. Dubbi su alcuni passaggi.

    Più preciso come? Hai chiesto cosa esegue dopo la if e te l'ho detto.
  • Re: Torre di hanoi in c. Dubbi su alcuni passaggi.

    Nel senso che la mia è una funzione void non dovrebbe ritornare nulla. Inoltre vorrei capire come fa il secondo printf a stampare 1->2 anziché 1->3 . Non capisco cosa accade alle variabili (visto che per la messa a schermo si usano le stesse variabili in entrambi i printf)
  • Re: Torre di hanoi in c. Dubbi su alcuni passaggi.

    Non ho detto che ritorna nulla. Ho detto che esegue la return chr termina la funzione e torna a chi l'ha chiamata.

    Se non hai ben presente il funzionamento dello stack delle chiamate non capirai come funzionano le funzioni ricorsive.

    Le variabili sono locali quindi il loro valore é diverso per ogni chiamata della funzione.

    Segui su carta tutte le chiamate e segna i valori delle variabili ad ogni chiamata.
Devi accedere o registrarti per scrivere nel forum
5 risposte