Ricorsione su liste

di il
2 risposte

Ricorsione su liste

Salve a tutti , sono alle prese con un esercizio che richiede l'utilizzo delle liste e della ricorsione. Il testo dell'esercizio e':
/*Scrivere una funzione ricorsiva che restituisca il massimo degli interi contenuti in una lista concatenata.*/
.
Ho pensato di applicare lo stesso ragionamento che ho applicato allo stesso esercizio dove invece di utilizzare le liste si utilizzavano i vettori. Pensavo che il ragionamento andasse bene ma a quanto pare c'è qualcosa da sistemare perché se nella lista inserisco 1 2 3 4 5 invece di restituirmi come valore massimo 5 mi restituisce 4. Potreste aiutarmi a capire cosa c'è di sbagliato?
Ecco il codice:
int massimoric(struct elemento *p, int l, int r){
int u, v;
int m=(l+r)/2;

 if(l==r)
  return p->inf;
 u=massimoric(p->next,l,m);
 v=massimoric(p->next,m+1,r);
  if(u>v)
   return u;
  else
   return v;
}

2 Risposte

  • Re: Ricorsione su liste

    E' molto più semplice
    int massimoric(struct elemento *p)
    {
        int tmp;
        
        if( p->next == NULL )  // se non ci sono elementi successivi
            return p->inf;     // il massimo è quello corrente
            
        tmp = massimoric(p->next)   // trova il massimo fra i successivi
        
        // determina il massimo fra il corrente e il massimo dei successivi
        if(tmp > p->inf)   
            return tmp;
        
        return p->inf;
    }
  • Re: Ricorsione su liste

    Si hai ragione, è molto più semplice. Grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte