Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

Zentral4:fakultät

Berechnen der Fakultät durch For/While/Rekursion

Java source code icon factorialLive.java — Java source code, 1 KB (1732 bytes)

Dateiinhalt

package Factorial;

public class factorialLive {

	public static void main(String[] args) {
		// Wir demonstrieren 3 Arten, die Fakultät einer Zahl zu berechnen

		// Anstatt von der Tastatur einzulesen:
		int zahl = 4;

		// WHILE-Schleife
		long faku = 1;
		int i = zahl;
		// WHILE-Schleife, herunterzählend
		while (i > 1) {
			faku *= i; // faku = faku * zahl
			i--;
		}
		System.out.println("Fakultät von " + zahl + " ist : " + faku);

		faku = 1;
		// FOR-Schleife, hochzählend
		for (int j = 1; j <= zahl; j++) {
			faku *= j;
			/*
			 * Natürlich könnte man auch 
			 * 		faku = zahl; 
			 * 		for (int j = 2; j < zahl;j++) {..}
			 * nehmen um zwei Scheifendurchläufe einzusparen, wenn man unbedingt will.
			 * Aber wie wir in der Vorlesung bei der Diskussion der O-Notation gesehen haben, 
			 * sind solche konstanten Einsparungen selten den Verlust 
			 * an Leserlichkeit oder das Riskio für neue Fehler wert.
			 */
		}
		System.out.println("Fakultät von " + zahl + " ist : " + faku);

		// 3. Variante: Rekursion!
		faku = fakultaet(zahl);
		System.out.println("Fakultät von " + zahl + " ist : " + faku);
	}

	public static long fakultaet(int z) {
		// Berechnet die Fakultät einer Zahl durch Rekursion
		if (z == 1) {
			// Die Fakultät von 1 ist einfach zu berechnen: 1! = 1
			return 1;
		} else {
			// Die Fakultät von n ist ebenso einfach zu berechnen,
			// wenn man die Fakultät von (n-1) kennt: n! = n * (n-1)!
			long prez = fakultaet(z - 1);
			long faku = z * prez;
			return faku;
			// Man kann das natürlich auch ohne Hilfsvariablen als ein Befehl
			// schreiben, ob es das schneller oder leserlicher macht, 
			// ist aber zu bezweifeln:
			// return z * fakultaet(z-1);
		} 
	}
}

Artikelaktionen


Funktionsleiste