PDA

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:

andbin
01-02-2007, 16:08
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".

Furla
01-02-2007, 16:15
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:

andbin
01-02-2007, 16:44
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:

andbin
01-02-2007, 16:58
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!!!