Media in un array con ricorsione

Anonimo_v.2
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:
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
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);
}

Risposte
ghira1
La media di 0 e 10 è, quindi... ?

apatriarca
La riga
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.

Anonimo_v.2
"apatriarca":
La riga
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?

ghira1
"MatteFra":

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?

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)\).

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
return sum(A,size)/size;

Anonimo_v.2
Grazie mille!! Mi torna tutto allora! :D

ghira1
"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)\).


$(n+1)$ è un typo?

apatriarca
Sì, dovrebbe essere (n - 1)..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.