/** * RecursiveFactorsComputer * * 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 recursivelyMakeFactors(int n) { if (n <= 0) throw new IllegalArgumentException(n + " valore non ammesso"); return recursivelyMakeFactors(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 recursivelyMakeFactors(int p, int from) { // caso base if (from * from > p) return Integer.toString(p); // chiamate ricorsive if (p % from == 0) return from + "*" + recursivelyMakeFactors(p / from, from); return recursivelyMakeFactors(p, from + 1); } /** rende la classe eseguibile per provare il metodo recursivelyMakeFactors(). 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 = recursivelyMakeFactors(n); if (factors.equals(args[0])) System.out.println(n + " e' numero primo"); else System.out.println(args[0] + " = " + factors); } }