/** * esegue la fattorizzazione di un numero intero n > 0 in modo ricorsivo. * Il numero da fattorizzare e' passato come argomento nella riga di comando. * Il risultato e' visualizzato a standard output. * * @author A. Luchetta * @version 11-Nov-2006 */ public class RecursiveFactorsComputer { /** calcola la fattorizzazione di un numero intero @param n il numero da fattorizzare @return la fattorizzazione @throws java.lang.IllegalArgumentException se il parametro n e' negativo */ public static String makeFactors(int n) { if (n < 0) throw new IllegalArgumentException(); return makeFactors(n, 2); } /* calcola ricorsivamente la fattorizzazione a partire dal fattore from @param p il numero da fattorizzare @param from il numero minimo da cui iniziare la fattorizzazione @return stringa contenente la fattorizzazione */ private static String makeFactors(int p, int from) { // caso base if (from * from > p) return Integer.toString(p); // chiamate ricorsive if (p % from == 0) return from + "*" + makeFactors(p / from, 2); return makeFactors(p, from + 1); } /** rende la classe eseguibile per provare il metodo makeFactors(). Il numero n e' passato come argomento nella riga di comando. Il risultato e' visualizzato a standard output. */ public static void main(String[] args) { if (args.length < 1) { System.out.println("uso: $java RecursiveFactorsComputer string"); return; } int n = Integer.parseInt(args[0]); String factors = makeFactors(n); if (factors.equals(args[0])) System.out.println(n + " e' numero primo"); else System.out.println(args[0] + " = " + factors); } }