[C++] valore massimo in modo ricorsivo

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

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
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.

Risposte
nessuno.nobody
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

ezio1400
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?

nessuno.nobody
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.

ezio1400
Grazie ora è più chiaro

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.