/** * Classe eseguibile che calcola il valore medio degli elementi di un array di * interi in modo ricorsivo * * @author Adriano Luchetta * @version 5-nov-2005 * * Espressione ricorsiva della media (S e' il simbolo di sommatoria): * N-1 * media(a, N) = _1_ * S a[i] = _1_ * (a[N-1] + (N-1] * media(a, N-1)) * N i=0 N */ import java.util.Random; public class RecursiveMeanComputer { private static double computeRecursiveMean(int[] a, int aSize) { // caso base if (aSize == 1) return (double) a[0]; // passo ricorsivo return (a[aSize - 1] + (aSize - 1) * computeRecursiveMean(a, aSize - 1)) / aSize; } private static double computeIterativeMean(int[] a, int aSize) { int sum = 0; for (int i = 0; i < aSize; i++) sum = sum + a[i]; return (double)sum / aSize; } public static void main(String[] args) { final int DIM= Integer.parseInt(args[0]); final int MAX = Integer.parseInt(args[1]); int sum = 0; int[] a = new int[DIM]; System.out.print("a = "); Random rand = new Random(); for (int i = 0; i < DIM; i++) { a[i] = 1 + rand.nextInt(MAX); System.out.print(a[i] + " "); sum = sum + a[i]; } System.out.println(); System.out.println("media ricorsiva = " + computeRecursiveMean(a, a.length)); System.out.println("media iterativa = " + computeIterativeMean(a, a.length)); } }