Soluzione 6.2

La soluzione ricorsiva al problema e` gia` delineata nel testo dell'esercizio: il caso base corrisponde alla condizione in cui m e` divisibile per n, e il passo ricorsivo corrisponde alla ricerca del M.C.D. tra n e m%n
public class RecMCDTester
{
    public static void main(String[] args)
    {
        if (args.length != 2)
        {
            System.out.println("Uso: $java RecMCDTester  ");
            System.exit(1);
        }

        try
        {
            int m = Integer.parseInt(args[0]);
            int n = Integer.parseInt(args[1]);
            int mcd = recursiveMCD(m, n);
            System.out.println("Il M.C.D tra " + m + " e " + n + " e` " + mcd);
        }
        catch(NumberFormatException e)
        {
            System.out.println("I due argomenti devono essere numeri interi!");
            System.exit(1);
        }
        catch(IllegalArgumentException e)
        {
            System.out.println("I due argomenti devono essere int positivi!");
            System.exit(1);
        }

    }

    private static int recursiveMCD(int m, int n)
    {
        if (m < 1 || n < 1)
            throw new IllegalArgumentException();

        int rem = m % n;  // Attenzione: non ho bisogno di verificare che m > n
                          // o viceversa. Perche'? Quanto vale rem se m < n?
        if (rem == 0)
            return n;			//caso base
        return recursiveMCD(n, rem);	//passo ricorsivo
    }
}