PDA

Visualizza la versione completa : [C++] Invertire l'ordine di un array in modo ricorsivo


marcos666
23-02-2011, 19:42
Salve, un altra ricorsione questa volta almeno per me un po piu complessa dove provo a compilare ma non mi stampa l'array all'inverso.
la traccia dice cosi:


– Dato un vettore di interi, costruire (con una funzione ricorsiva) un secondo vettore che contiene gli
stessi elementi del primo ma in ordine inverso.
Esempio: se A = [1,2,3,4,5], il vettore costruito dovrà essere B = [5,4,3,2,1].*/


# include <iostream>
using namespace std;

bool costruzione (int [],int [], int ,int);
void stampa (int []);
const int n=5;
int main ()
{
int a[n]={1,2,3,4,5};
int b[n]={0};

if (costruzione (a,b,4,0))
cout<<endl;
stampa (b);
return 0;
}

bool costruzione (int a[],int b[], int i, int j)
{
if (i==n-1)
return true;

if (a[i]!=b[j])
return false;


return costruzione (a,b,i-1,j+1);

}
void stampa (int b[])
{
for (int j=0;j<n;j++)
cout<<b[j];
cout<<endl;


}

premoli
23-02-2011, 20:06
Ciao!!!

Beh ci sono diverse imprecisioni, prima di tutto non capisco perché fai restituire un bool alla funzione, a cosa ti serve?

Poi sempre nella funzione è sbagliato il passo base e anche il passo ricorsivo, non assegni mai al vettore b i valori del vettore a, quindi mi sembra normale che il programma non faccia quello che vuoi, come minimo un' assegnazione ci deve essere ;) prova un po' a modificare il codice se poi non riesci chiedi pure.

marcos666
23-02-2011, 20:24
Ciao , inanzitutto grazie dall'aiuto, capisco che vuoi dire di fare una cosa del tipo : a[i]=b[j];
ma è la condione iniziale che non mi viene propio per far scorrere l'array a e poi assegnare ogni valore a b

VincenzoTheBest
23-02-2011, 20:29
Originariamente inviato da marcos666
ma è la condione iniziale che non mi viene propio
Puoi basarti sull'indice i, oppure sull'indice j.
Se ti basi su i, questo indice viene decrementato, e sai bene che gli array non hanno indici negativi...quindi?

marcos666
23-02-2011, 20:53
guarda solo questo mi viene in mente:



# include <iostream>
using namespace std;

int costruzione (int [],int [], int ,int);
void stampa (int []);
const int n=5;
int main ()
{
int a[n]={1,2,3,4,5};
int b[n]={0};

if (costruzione (a,b,4,0))
cout<<endl;
stampa (b);


return 0;
}
int costruzione (int a[],int b[], int i, int j)
{
while (j!=n-1)
a[i]=b[j];

return costruzione (a,b,i-1,j+1);

}
void stampa (int b[])
{
for (int j=0;j<n;j++)
cout<<b[j];
cout<<endl;


}

VincenzoTheBest
23-02-2011, 21:37
Originariamente inviato da marcos666
guarda solo questo mi viene in mente:

Il while non ci vuole assolutamente, in quel modo la funzione entra in un loop infinito..
Il corpo corretto della funzione è questo:


if( i == -1 )
return b;
b[j] = a[i];
return costruzione (a, b, i-1, j+1);

marcos666
23-02-2011, 21:42
grazie per la tua pazienza

Loading