import java.util.Random;
public class ArrayMinRic 
{
    // Metodo main:
    public static void main(String [] args) 
    {
	ConsoleReader console = new ConsoleReader(System.in);
	int n;
        do 
            {System.out.print("Inserisci un numero intero positivo > ");
            n = console.readInt();
            if (n <= 0) 
                System.out.println("Errore! Il numero deve essere positivo!");
            }
        while (n <= 0);
	
	// Crea un array riempito di valori casuali.
	int[] a = new int[n];
	Random generator = new Random();
	for (int i = 0; i < a.length; i++)
	    a[i] = generator.nextInt(n);
	
	// Stampa l'array a.
	System.out.print("Array: ");
	for (int i = 0; i < a.length; i++)
			System.out.print(a[i] + " ");
	System.out.println();
	
	// Determina il minimo dell'array chiamando il metodo minRic.
	int min = minRic(a, 0, a.length-1);
	System.out.println("Il minimo e' "+min);
    }

    // Metodo minRic
    public static int minRic(int a [ ], int from, int to) 
    { 
	if (from == to) 
	    return a[from]; 
	int mid = (from + to)/2; 
	
	/* cerchiamo ricorsivamente il minimo nella prima e nella
	   seconda metà dell'array: */ 
	int min1 = minRic(a, from, mid); 
	int min2 = minRic(a, mid+1, to); 
	if (min1 <= min2) 
	    return min1; 
	else 
	    return min2; 
    } 
}
