Torre di hanoi in c. Dubbi su alcuni passaggi.

di Anonimizzato22944 il
5 risposte
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

  • Continua con il return (anche se non l'hai scritto, c'è).
  • Continuo a no capire cosa accade dopo e come faccia a stampare gli altri risultati. Potresti essere più preciso?
  • Più preciso come? Hai chiesto cosa esegue dopo la if e te l'ho detto.
  • 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)
  • 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