Ricorsione

di il
6 risposte

Ricorsione

Scrivere un programma con ricorsiva (in C) che calcoli la somma degli elementi di un array A[1..n] di n interi.

#include <stdio.h>
#define SIZE 10

int somma (int vett[], int n);
int main ()
{
    int numeri[]={1,2,3,4,6,7,8,9,4,0};
   int tot=10;
    

   printf("%d", somma(numeri,tot));

   printf("\n");
   return 0;
}

int somma (int vett[], int n)
{
   if (n==0)
      return 0;
   else
      return (vett[n-1]+somma(vett, n-1));
}
e si trova cioè mi calcola la somma degli elementi del vettore ma se voglio inserirli da tastiera e poi voglio che avviene la somma...come posso fare?
grazie in anticipo

6 Risposte

  • Re: Ricorsione

    Basta che populi l’array da stdin, a meno che tu voglia anche una dimensione generica che venga chiesta da tastiera e in tal caso bisogna ricorrere alla memoria dinamica (oppure ad un variable-length array)
  • Re: Ricorsione

    _Achille ha scritto:


    Basta che populi l’array da stdin, a meno che tu voglia anche una dimensione generica che venga chiesta da tastiera e in tal caso bisogna ricorrere alla memoria dinamica (oppure ad un variable-length array)
    intendo scrivere in vettore da tastiera e poi si calcola la somma degli elementi che ho digitato da tastiera, avevo fatto cosi:
    
    int array[10];
        int i;
    
        for (i=0; i<10; i++)
        {
            printf("Inserisci un numero :\n");
            scanf("%d", &array[i]);
        }
        return 0;
    
    pero non mi va
  • Re: Ricorsione

    saraciao ha scritto:


    _Achille ha scritto:


    Basta che populi l’array da stdin, a meno che tu voglia anche una dimensione generica che venga chiesta da tastiera e in tal caso bisogna ricorrere alla memoria dinamica (oppure ad un variable-length array)
    intendo scrivere in vettore da tastiera e poi si calcola la somma degli elementi che ho digitato da tastiera, avevo fatto cosi:
    
    #include <stdio.h>
    #define SIZE 10
    
    int somma (int vett[], int n);
    int main ()
     {
    int *mioArray; // Sarà il mio array
    int quantiElementi; // Lo chiedo all'utente
    int i; // Indice per scorrere l'array
    
    printf("Quanti elementi deve avere l'array? ");
    scanf("%d", &quantiElementi);
    
    // Alloco il mio array:
    mioArray = (int *) malloc(quantiElementi * sizeof(int));
    
        for (i=0; i<quantiElementi; i++)
        {
            printf("Inserisci un numero :\n");
            scanf("%d", &mioArray[i]);
        }
    
     printf("%d", somma(mioArray,i));
    
       printf("\n");
       return 0;
    }
    
    int somma (int vett[], int n)
    {
       if (n==0)
          return 0;
       else
          return (vett[n-1]+somma(vett, n-1));
    }
    
    grazie mille, ho risolto cosi
  • Re: Ricorsione

    - soluzione con array statico: dichiari un array di una certa dimensione N e quando vai a chiedere all'utente il numero n di elementi da inserire, devi controllare che sia n<=N.
    - soluzione con allocazione dinamica della memoria: risulta banale una volta studiato l'argomento.
  • Re: Ricorsione

    saraciao ha scritto:


    
    #include <stdio.h>
    #define SIZE 10
    
    int somma (int vett[], int n);
    int main ()
     {
    int *mioArray; // Sarà il mio array
    int quantiElementi; // Lo chiedo all'utente
    int i; // Indice per scorrere l'array
    
    printf("Quanti elementi deve avere l'array? ");
    scanf("%d", &quantiElementi);
    
    // Alloco il mio array:
    mioArray = (int *) malloc(quantiElementi * sizeof(int));
    
        for (i=0; i<quantiElementi; i++)
        {
            printf("Inserisci un numero :\n");
            scanf("%d", &mioArray[i]);
        }
    
     printf("%d", somma(mioArray,i));
    
       printf("\n");
       return 0;
    }
    
    int somma (int vett[], int n)
    {
       if (n==0)
          return 0;
       else
          return (vett[n-1]+somma(vett, n-1));
    }
    
    grazie mille, ho risolto cosi
    Perfetto, unico consiglio: non usare i nella chiamata a somma, in quanto dovrebbe esistere solo a livello del for (e non capisco perché tu dichiari prima).
  • Re: Ricorsione

    @saraciao non modificare i post in corso d'opera, altrimenti fai passare la gente per pazza!
Devi accedere o registrarti per scrivere nel forum
6 risposte