// In diesem Programm gibt es gleich mehrere Probleme, // und der Wertebereich von int ist nur eins davon... import java.math.*; public class Fakultaet { // Das ist die eigentliche Berechnungsroutine static int berechne(int i) { if(i <= 1) return 1; return i * berechne(i-1); } // Das ist die "genaue" Version static BigInteger fakultaet_2(int i) { if (i <= 1) return BigInteger.ONE; return BigInteger.valueOf(i).multiply(fakultaet_2(i-1)); } static void test(int von, int bis) { int vorgaenger = -1; for(int i=von; i<=bis; i++) { boolean fehler = false; int wert = berechne(i); BigInteger erwartet = fakultaet_2(i); if(vorgaenger > wert) { System.out.println("FEHLER: berechne(" + i + ")=" + wert + " < vorgaenger=" + vorgaenger); fehler = true; } vorgaenger = wert; if(!BigInteger.valueOf(wert).equals(erwartet)) { System.out.println("FEHLER: berechne(" + i + ")=" + wert + " Erwartet: " + erwartet); fehler = true; } if(!fehler) System.out.println("OK: berechne(" + i + ")=" + wert); } } public static void main(String[] args) { // int eingabe = Integer.valueOf(args[0]).intValue(); // System.out.print(eingabe); // System.out.print("! = "); // System.out.println(berechne(eingabe)); int von = -1, bis = 1000; System.out.println("Lasse Testschleife für berechne(i) laufen " + "von i=" + von + " bis i=" + bis); test(von,bis); } }