Pagina 1 di 1

Media in un array con ricorsione

MessaggioInviato: 27/01/2023, 18:53
da MatteFra
Ciao a tutti,
mi potete controllare questo esercizio perfavore?

scrivere una funzione che calcoli la media degli elementi contenuti in un array di numeri e che rispetti la seguente interfaccia:
Codice:
float avg(float A[], int size)
utilizzare il meccanismo della ricorsione (e’ possibile realizzare funzioni ausiliarie)

Io l'ho risolto in questo modo ma non ne sono sicurissimo, anzi posso già dire che ne potrebbe mancare una parte
Codice:
float avg (float A[], int size)
{
   int N = {6, 8, 10, 12, 14}
   if (size == 0)
      return 0;   
   else
      return A[N] + avg (A, size - 1);
}

Re: Media in un array con ricorsione

MessaggioInviato: 27/01/2023, 18:57
da ghira
La media di 0 e 10 è, quindi... ?

Re: Media in un array con ricorsione

MessaggioInviato: 27/01/2023, 20:51
da apatriarca
La riga
Codice:
int N = {6, 8, 10, 12, 14}

non compila e non mi è chiaro che cosa tu voglia fare. Dopodichè sembra tu stia calcolando la somma, non la media.

Re: Media in un array con ricorsione

MessaggioInviato: 28/01/2023, 15:00
da MatteFra
apatriarca ha scritto:La riga
Codice:
int N = {6, 8, 10, 12, 14}

non compila e non mi è chiaro che cosa tu voglia fare. Dopodichè sembra tu stia calcolando la somma, non la media.


La N infatti ho sbagliato a metterla e la levo, la mia domanda era proprio come procedere per il calcolo della media, devo modificare la ricorsione aggiungendo / size?

Re: Media in un array con ricorsione

MessaggioInviato: 28/01/2023, 22:33
da ghira
MatteFra ha scritto:La N infatti ho sbagliato a metterla e la levo, la mia domanda era proprio come procedere per il calcolo della media, devo modificare la ricorsione aggiungendo / size?

E se lo fai a mano con 1,2,3 funziona?

Re: Media in un array con ricorsione

MessaggioInviato: 29/01/2023, 20:04
da apatriarca
La media di \(n\) valori è definita come \(\sum_{i=1}^n a_i/n\). Per il calcolo usando una formula ricorsiva puoi osservare che se hai una media sui primi \(n-1\) valori allora puoi calcolare la media di tutti usando la formula \(a_n/n + (n+1)/n \sum_{i=1}^{n-1} a_i/(n-1)\).

Re: Media in un array con ricorsione

MessaggioInviato: 29/01/2023, 20:10
da apatriarca
Ovviamente c'è anche la soluzione di usare la ricorsione di una funzione ausiliaria solo per il calcolo della somma avendo quindi il corpo della media uguale a
Codice:
return sum(A,size)/size;

Re: Media in un array con ricorsione

MessaggioInviato: 30/01/2023, 14:24
da MatteFra
Grazie mille!! Mi torna tutto allora! :D

Re: Media in un array con ricorsione

MessaggioInviato: 31/01/2023, 10:22
da ghira
apatriarca ha scritto:La media di \(n\) valori è definita come \(\sum_{i=1}^n a_i/n\). Per il calcolo usando una formula ricorsiva puoi osservare che se hai una media sui primi \(n-1\) valori allora puoi calcolare la media di tutti usando la formula \(a_n/n + (n+1)/n \sum_{i=1}^{n-1} a_i/(n-1)\).


$(n+1)$ è un typo?

Re: Media in un array con ricorsione

MessaggioInviato: 01/02/2023, 15:00
da apatriarca
Sì, dovrebbe essere (n - 1)..