[C++] valore massimo in modo ricorsivo

Messaggioda ezio1400 » 23/12/2014, 20:05

Non riesco bene a capire il funzionamento dell'algoritmo che permette di individuare il valore massimo di un array nella maniera ricorsiva :

Codice:
int myMaxArray(int v[], int N) {
   if (N <= 0) 
     return 0;  
   if (N == 1) 
     return v[0];
   int t = myMaxArray(&v[1], N­-1);  
   if (v[0] > t) 
     return v[0];
   else 
     return t;  
}


Non mi è chiaro soprattutto la seguente riga di codice
Codice:
int t = myMaxArray(&v[1], N-­1); 
ovvero quando la funzione richiama se stessa. Quali sono i parametri che invia?
Inizialmente la funzione riceve l'intero vettore e la lunghezza del vettore. Quando si richiama invia in particolare &v[1]; Io ho pensato che invia solo il valore contenuto nella cella 1 del vettore iniziale ma ciò non avrebbe senso.
ezio1400
Junior Member
Junior Member
 
Messaggio: 58 di 264
Iscritto il: 11/10/2014, 12:06

Re: [C++] valore massimo in modo ricorsivo

Messaggioda nessuno.nobody » 23/12/2014, 20:16

Il pasasggio da te evidenziato non fa altro che passare alla funzione un array, il cui elemento in posizione zero è l'elemento in posizione 1 dell'array attuale.

In quanto in C, se hai un array del tipo
int v[] = {0,1,2,3,4}; Hai che *(v+1) è uguale a v[1]
Quindi in quel passaggio stai inviando l'indirizzo della cella nella posizione numero 1 e la nuova lunghezza N - 1
nessuno.nobody
Junior Member
Junior Member
 
Messaggio: 146 di 306
Iscritto il: 19/04/2012, 08:51

Re: [C++] valore massimo in modo ricorsivo

Messaggioda ezio1400 » 23/12/2014, 20:51

Ok, riproducendo il programma su un foglio di carta ora mi risulta. Non mi molto chiaro il passaggio in cui invia l'indirizzo della cella 1. Per capirci con un 'esempio io ho il vettore v[] = {0,1,2,3,4} con i vari indirizzi {11205,11206,11207,11208,11209}. Ora con &v[1] invio l'indirizzo della cella [1] 11206 , ma perchè facendo cosi mi ritrovo tutto il vettore che va dall'indirizzo 11206 fino a 11209?
ezio1400
Junior Member
Junior Member
 
Messaggio: 59 di 264
Iscritto il: 11/10/2014, 12:06

Re: [C++] valore massimo in modo ricorsivo

Messaggioda nessuno.nobody » 24/12/2014, 20:56

Perché in C, con la notazione int *a oppure int []a, descrivi un puntatore ad un area di memoria e non un array vero e proprio.
Quindi "inviando" il primo indirizzo da tenere in considerazione assieme alla nuova dimensione (n-1), individui il "nuovo" array.
nessuno.nobody
Junior Member
Junior Member
 
Messaggio: 147 di 306
Iscritto il: 19/04/2012, 08:51

Re: [C++] valore massimo in modo ricorsivo

Messaggioda ezio1400 » 25/12/2014, 11:06

Grazie ora è più chiaro
ezio1400
Junior Member
Junior Member
 
Messaggio: 60 di 264
Iscritto il: 11/10/2014, 12:06


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite