ybor4 ha scritto:
Ho capito che si combinano tra i valori iniziali ovvero $2 = 1 $4=2 $3=3 e la chiamata statica $2=1 $4=3 $3=0 ma come si alternano no?
allora, metti caso io abbia una funzione "pippo" e la chiamo così: "pippo par1 par2". Pippo è il nome funzione, par1 è il primo parametro, e par2 il secondo.
Nella funzione pippo, io elaboro i parametri usando $1 e $2. La prima volta che entro in pippo, $1 è "par1" e $2 è "par2".
Ora, da qualche parte pippo chiama sé stessa, perché è una funzione ricorsiva. La chiamata avviene con una riga che dice: "pippo $2 $1". Nota che $2, in questa chiamata, viene prima di $1. Nella prossima ricorsione di pippo, quindi, $1 non sarà più "par1", ma "par2"..e $2 sarà "par1"! Abbiamo cioè invertito l'ordine dei parametri. Ma che succede quando arriviamo di nuovo alla ricorsione ? succede che la chiamata "pippo $2 $1" stavolta si traduce in "pippo par1 par2"...ovvero torniamo alla situazione iniziale! Giacché questa cosa si ripete ad ogni iterazione, come vedi i parametri non fanno altro che invertirsi di volta in volta! Capito ora ? $1 e $2 non sono variabili *statiche*, ma sono i parametri passati alla funzione in QUELLA ricorsione specifica, e se io richiamo la ricorsione con $2 $1, nella successiva saranno invertiti... e in quella dopo, saranno dritti di nuovo

Spero davvero di essere stato chiaro perché meglio di così non so spiegartelo
Per prima cosa $1 se viene decrementato perche non resta a zero ?
per lo stesso motivo di sopra. $1 è una variabile locale della funzione dohanoi, quindi ogni ricorsione ha la propria. Se in una ricorsione la variabile raggiunge 0, la funzione termina e si ritorna alla ricorsione precedente. E in questa, magari $1 non è più zero.
Spero di non aver detto un mare di cavolate!
Per carità, non sono cavolate, ma permettimi di dire che hai scelto uno script che oltre ad essere un puro esercizio di stile, ha utilità praticamente nulla e non corrisponde a nulla di quanto vedrai nel mondo reale se tu dovessi mai andare ad amministrare una macchina usando Linux/Unix e bash. Io se fossi il tuo prof avrei molto più piacere ad esempio a vedere uno scriptino che prende in pasto un file di testo ed interpreta ogni riga come una directory, e ne fa il backup con tar, per poi spostarla in una directory di destinazione, e magari rimuove i vecchi backup dopo x giorni. E' immediato (ma non banalissimo) da realizzare, e ti insegna di più su variabili, path, comandi di sistema, confronti delle date, e operazioni pratiche su un sistema live unix di quanto tu creda di stare imparando ora
Ciao
nuu
Learn to pause -- or nothing worthwhile can catch up to you.