View Full Version : [C] Funzioni Ricorsione
alberto.frz
01-02-2007, 15:40
Ciao raga, qualcuno mi aiuta a scrivere questa funzione!?! Mi trovo un po' impacciato avendo due array...
ecco il testo:
Definire una funzione ricorsiva int Inverse(char tab1[], tab2[], int dim) che, date due tabelle tab1, tab2 di caratteri della stessa dimensione dim, restituisce 1 se le tabelle contengono gli stessi elementi in ordine inverso, e restituisce 0 altrimenti.
:help:
ecco il testo:
Definire una funzione ricorsiva int Inverse(char tab1[], tab2[], int dim) che, date due tabelle tab1, tab2 di caratteri della stessa dimensione dim, restituisce 1 se le tabelle contengono gli stessi elementi in ordine inverso, e restituisce 0 altrimenti.Uhm curioso .... questo esercizio l'ho già visto tale e quale, guarda caso, su un altro forum appena qualche settimana fa. :D Tra l'altro avevo pure postato la "mia" soluzione.
Stavolta però non posto la soluzione intera :fagiano: .... posso darti un piccolo indizio: quando chiami ricorsivamente la funzione devi passare, per uno dei 2 array (a te la scelta), l'indirizzo della seconda cella, in modo che nella funzione richiamata diventi "virtualmente" la prima cella. E devi anche passare una dimensione "più corta".
se per "tabelle di caratteri" si intendono array di caratteri monodimensionali, l'alternativa alla soluzione di andbin è usare un argomento di default da porre uguale a zero, che aumenta ad ogni ricorsione fino a raggiungere dim/2...
alberto.frz
01-02-2007, 16:35
vi mostro dove mi blocco io:
int Inverse (char tab1[], char tab2[], int dim) {
if (dim==0)
return 1;
if (tab1[dim-1]==tab2[cosa metto?])
return Inverse(tab1,tab2,dim-1);
return 0;
}
questo è quello che ho scritto fino ad ora, adesso provo a meditare sulle vostre dritte...ne sono cmq buone accette anche altre :Prrr:
if (tab1[dim-1]==tab2[cosa metto?])
return Inverse(tab1,tab2,dim-1);
return 0;
}Se i 2 elementi sono uguali allora devi proseguire con la ricorsione.
E tieni a mente quanto ho detto sul passaggio di un puntatore alla cella successiva ...
alberto.frz
01-02-2007, 16:47
eccolo!!!
è giusto? a me compila e funziona (sto usando xcode di osx)
int Inverse (char tab1[], char tab2[], int dim) {
if (dim==0)
return 1;
if (tab1[dim-1]==tab2[0])
return Inverse(tab1,tab2+1,dim-1);
return 0;
}
grazie, a pensarci bene non era proprio tanto difficile è che a volte mi sembra di avere due fette di mortadella sopra gli occhi!!!
era un esercizio di un vecchio esame di programmazione c...mi sto preparando per l'esame...
grazie a tutti :Prrr:
eccolo!!!
è giusto? a me compila e funziona (sto usando xcode di osx)È ok ... ben fatto! ;)
alberto.frz
01-02-2007, 17:03
È ok ... ben fatto! ;)
grazie a voi!!!
andbin devo farti i complimenti xkè leggendo qua e la nel forum ho visto che le sai proprio tutte!!!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.