Aiuto con semplice funzione ricorsiva

di il
3 risposte

Aiuto con semplice funzione ricorsiva

Salve ragazzi, ho da poco iniziato a programmare e avrei bisogno di aiuto con questo programma... il risultato è un numero spaventoso e non capisco perchè!!
In breve bisogna calcolare la somma di n elementi di un array in modo ricorsivo...

#include<stdio.h>
#define MAX 4
int somma( int n, int array[n]);

int main(){
int array[MAX];
int i=0, som;

printf ("Inserisci 4 numeri:\n");
for (i=0 ; i<MAX; i++){

scanf ("\t%d",&array);
}

som = somma( i, array);
printf ("\nLa somma è : %d\n", som);
return 0;
}


int somma( int n, int array[n]){
int som;
if (n==0)
return 0;
else{
return array[n] + somma(n-1, array);
}
}

Grazie in anticipo!

3 Risposte

  • Re: Aiuto con semplice funzione ricorsiva

    Attento al parametro che passi alla funzione somma.

    Quanto vale i?

    Poi nella funzione ricorsiva se n==0 ritorni 0. E' proprio quello che vuoi ritornare?
  • Re: Aiuto con semplice funzione ricorsiva

    Hai ragione i vale 4 e invece deve essere 3, e se non sbaglio quel numero enorme corrispondeva al contenuto dell'array nella posizione 5, possibile?
    Ho risolto in questo modo, non credo sia il massimo dell'efficienza però, non mi piace molto l'istruzione ' i--; ' ...il mio dubbio è che se nel ciclo for pongo i<MAX, i alla fine dovrebbe essere 3, e invece vale 4..

    #include<stdio.h>
    #define MAX 4

    int somma( int n, int array[n]);

    int main(){
    int array[MAX];
    int i=0, som;

    printf ("Inserisci i numeri:\n");
    for (i=0 ; i<MAX; i++){

    scanf ("\t%d",&array);

    }
    i--;
    som = somma( i, array);
    printf ("\nLa somma è : %d\n", som);
    return 0;
    }

    int somma( int n, int array[n]){
    int som;
    if (n==0)
    return array[n];
    else{
    return array[n] + somma(n-1, array);
    }
    }
  • Re: Aiuto con semplice funzione ricorsiva

    Hai ragione i vale 4 e invece deve essere 3, e se non sbaglio quel numero enorme corrispondeva al contenuto dell'array nella posizione 5, possibile?
    Sì! La somma comprendeva anche il valore dell'array all'indice 4 che era un valore casuale.
    ...il mio dubbio è che se nel ciclo for pongo i<MAX, i alla fine dovrebbe essere 3, e invece vale 4..
    Quello che dici non è esatto. Il ciclo for incrementa i fino a 4 per poter fallire l'ulimo confronto con MAX e uscire. Pensaci un attimo e vedrai che ti torna.

    Per come hai scritto tu la funzione puoi, se ti piace di più, scrivere la chiamata così:
    
    som=somma(MAX-1, array);
    
    se proprio non vuoi fare il decremento di i.

    Oppure pensare diversamente la funzione ricorsiva, magari in questo modo:
    int mysomma(int pos, int n, int array[n]){
    	
    	if (pos==n)
    		return 0;
    	
    	return array[pos] + mysomma(pos+1, n, array);
    }
    Chiamandola con i seguenti parametri:
    
    som=mysomma(0, MAX, array);
    
    P.s. Per favore usa i tag
     per postare codice, possibilmente indentato.
Devi accedere o registrarti per scrivere nel forum
3 risposte