/** * RecursivePrimeNumberLister * * Classe eseguibile che elenca i numeri primi da 1 a n usando un metodo ricorsivo * per calcolare i numeri primi. * * @author Adriano Luchetta * @version 14-Nov-2007 * */ public class RecursivePrimeNumberLister { public static void main(String[] args) { if (args.length < 1) { System.out.println("uso: $java RecursivePrimeNumberLister n"); return; } int[] q = recursivelyListPrimeNumbers(Integer.parseInt(args[0])); for (int e : q) System.out.print(e + " "); } public static int[] recursivelyListPrimeNumbers(int n) { //gestione pre-condizioni if ( n < 1) throw new IllegalArgumentException(n + " valore non lecito"); //caso base if (n <= 2) return new int[] {n}; //passo ricorsivo int[] q = recursivelyListPrimeNumbers(n - 1); //aggiunge n se n e' primo int i = 0; while (q[i] * q[i] <= n) if (n % q[i++] == 0) return q; //se n non e' primo, ritorna q //n e' primo e viene aggiunto alla lista int[] newQ = new int[q.length + 1]; System.arraycopy(q, 0, newQ, 0, q.length); newQ[q.length] = n; return newQ; } }