/** * Stampa su standard output i primi n termini della * successione di Fibonacci. * Il numero n sia acquisito da standard input . * * @author Adriano Luchetta * @version 16-Ott-2003 * @version 28-Ott-2003 */ /* Successione di Fibonacci f(0) = 1, f(1) = 2, f(k) = f(k-2) + f(k-1) per k > 2 Inventata per descrivere l'evoluzione di una popolazione di conigli a partire da un'unica coppia. Attenzione: i numeri della successione di Fibonacci crescono rapidamente tanto che il tipo di dati int non risulta adatto a memorizzare oltre i primi circa 40 termini della successione. */ import java.util.Scanner; public class GeneratoreFibonacci { public static void main(String[] args) { final int CARATTERI_PER_NUMERO = 10; final int NUMERO_COLONNE = 5; Scanner in = new Scanner(System.in); System.out.println("******************************************************"); System.out.println("*** PRIMI n TERMINI DELLA SUCCESSIONE DI FIBONACCI ***"); System.out.println("******************************************************"); System.out.println(""); System.out.print("n?: "); int n = in.nextInt(); // Gestione numeri negativi if (n <= 0) { System.out.println(n + ": ingreso non ammesso"); return; } // Generazione della successione di Fibonacci int f_old = 1; int f = 1; // stampa del primo termine equispaziata e in colonna String fString = f_old + ""; while (fString.length() < CARATTERI_PER_NUMERO) fString = " " + fString; System.out.print(fString + " "); // stampa del secondo termine equispaziata e in colonna fString = f + ""; while (fString.length() < CARATTERI_PER_NUMERO) fString = " " + fString; System.out.print(fString + " "); // cicli per calcolare f(k) = f(k-2) + f(k-1) // stampa equispaziata in colonne for (int k = 2 ; k < n; k++) { int f_new = f + f_old; f_old = f; f = f_new; fString = String.valueOf(f_new); while (fString.length() < CARATTERI_PER_NUMERO) fString = " " + fString; String separatore = " "; if ((k + 1) % NUMERO_COLONNE == 0) // k + 1 perche' k inizia a contare da 0 separatore = "\n"; System.out.print(fString + separatore); } } }