/** * RecursiveMinFinder * * Classe eseguibile che realizza, in modo ricorsivo, la ricerca del minimo in * un array riempito solo in parte di numeri interi * * @author Adriano Luchetta * @version 5-nov-2005 * */ import java.util.Random; import javax.swing.JOptionPane; public class RecursiveMinFinder { /** trova ricorsivamente il minimo in un array riempito solo in parte @param a l'array in cui effettuare la ricerca @param aSize il numero di elementi contenuti nell'array @return il minimo nell'array @throws java.lang.IllegalArgumentException se l'array a non contiene elementi */ public static int recursivelyfindMin(int[] a, int aSize) { // gestione delle precondizioni if (a == null || a.length < 1) throw new IllegalArgumentException("array nullo o vuoto: valori non ammessi"); if (aSize < 1) throw new IllegalArgumentException("aSize = " + aSize + " valore non ammesso"); // caso base if (aSize <= 1) return a[0]; // passo ricorsivo int subMin = recursivelyfindMin(a, aSize - 1); return a[aSize - 1] < subMin ? a[aSize - 1] : subMin; } /** rende la classe eseguibile per prova. Il numero n di elementi dell'array e l'intervallo [1, k] a cui appartengono i numeri casuali sono passati come argomenti da riga di comando. */ public static void main(String[] args) { if (args.length < 2) { System.out.println("uso: $java RecursiveMinFinder dim n"); return; } int dim= Integer.parseInt(args[0]); int[] b = new int[dim]; int n = Integer.parseInt(args[1]); String str = "dim = " + dim + ", n = " + n + "\n" + "a = "; Random rand = new Random(); // un altro modo di generare un numero casuale!!! for (int i = 0; i < dim; i++) { b[i] = 1 + rand.nextInt(n); // un altro modo di generare un numero casuale!!! str = str + " " + b[i]; } int min = recursivelyfindMin(b, b.length); str = str + "\n" + "min = " + min; JOptionPane.showMessageDialog(null, str); System.exit(0); } }