Funzione ricorsiva

di il
8 risposte

Funzione ricorsiva

Salve a tutti, a volte fa la somma bene altre volte no sapete spiegarmi perché?

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

int main()
{
    int a[MAX];
    int n;
    int i, add;

    printf("Quanti elementi vuoi inserire? ");
    scanf("%d", &n);

    for(i=0; i<n; i++)
    {
        printf("Inserisci l'elemento: ");
        scanf("%d", &a[i]);
    }

    add=somma(a, n);

    printf("La somma degli elementi e': %d", add);

    return 0;
}

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

8 Risposte

  • Re: Funzione ricorsiva

    A parte che dovresti fornire degli esempi di input con relativo output.
    Comunque, da un primo sguardo, dovresti di volta in volta utilizzare a[n-1] e non a[n]...
  • Re: Funzione ricorsiva

    Da quello che vedo, alle funzioni passi sempre lo stesso elemento di a[], dovresti passare a[x],
    con x incrementale da 0 a i;
    inoltre, non mi pare che n si decrementi
  • Re: Funzione ricorsiva

    Caro Mikelius, ILDoctor ragiona diversamente; invece di fare quello che tu ti aspetti, ovvero
    return a[0]+somma(&a[1], n-1);
    fa (o meglio, vorrebbe fare)
    return a[n-1]+somma(a, n-1);
    ma è comunque corretto Certo che per fare una somma non avrei scomodato una funzione ricorsiva
  • Re: Funzione ricorsiva

    Scusate ma se io devo contare la somma dei numeri di un array {a1, a2, ...., aN} devo sommare l'elemento in posizione N più l'elemento in posizione n-1 fino ad arrivare ad n=0
  • Re: Funzione ricorsiva

    Neanche io avrei scomodato una funzione ricorsiva è che devo imparare a farle e voglio capire bene il loro funzionamento
  • Re: Funzione ricorsiva

    candaluar ha scritto:


    Caro Mikelius, ILDoctor ragiona diversamente; invece di fare quello che tu ti aspetti, ovvero
    return a[0]+somma(&a[1], n-1);
    fa (o meglio, vorrebbe fare)
    return a[n-1]+somma(a, n-1);
    ma è comunque corretto Certo che per fare una somma non avrei scomodato una funzione ricorsiva

    perchè a[n-1]?
    return a[n-1]+somma(a, n-1);
  • Re: Funzione ricorsiva

    IlDoctor ha scritto:


    scusate ma se io devo contare la somma dei numeri di un array {a1, a2, ...., aN} devo sommare l'elemento in posizione N più l'elemento in posizione n-1 fino ad arrivare ad n=0
    E' vero: per la proprietà commutativa dell'addizione puoi anche sommare i vari elementi partendo da a1 fino ad aN... operazione di solito più "naturale".
    perchè a[n-1]?
    se hai un array di n elementi, l'ultimo elemento lo trovi all'indice n-1
  • Re: Funzione ricorsiva

    perchè a[n-1]?
    se hai un array di n elementi, l'ultimo elemento lo trovi all'indice n-1
    è vero non ci avevo pensato Grazie mille sei stato gentilissimo
Devi accedere o registrarti per scrivere nel forum
8 risposte