BigInteger verwenden In Java wird die Klasse BigInteger häufig verwendet, um Zahlen, insbesondere GROSSE Zahlen, zu verarbeiten. Wenn wir int verwenden, dann ist die maximale Fakultät, die wir ohne Datenverlust verarbeiten können, die der Zahl 31. Für den Datentyp long ist die maximale Fakultät die der Zahl 39. Was aber, wenn wir die Fakultät von 100 berechnen müssen? Passen wir die vorherigen Lösungen mit BigInteger an. Gewöhnliche Lösung public static BigInteger getFactorial(int f) { // Berechnen der Fakultät mit BigInteger (Java Fakultät math) BigInteger result =; for (int i = 1; i <= f; i++) result = ltiply(lueOf(i)); Der Algorithmus ist im Wesentlichen derselbe, aber hier nutzen wir die Möglichkeiten von BigInteger: ist der Startwert 1, und multiply() wird verwendet, um den vorherigen Fakultätswert und die aktuelle Zahl zu multiplizieren. Java fakultät berechnen windows 10. Rekursive Lösung public static BigInteger getFactorial(int f) { return lueOf(1);} return lueOf(f). multiply(getFactorial(f - 1));}} Die allgemeine Logik der Lösung ändert sich nicht, außer dass einige Methoden für die Zusammenarbeit mit BigInteger hinzugefügt werden.
while (n! =0) bedeutet das, dass wenn n! =0 ist das er dann das da in dem block machen soll? (aber n! ist doch net null wenn n einen wert hat oder? n--; <-- heißt denke ich mal das er von n immer eins abziehen soll Ergebnis=Ergebnis*n; bedeutet, dass er der variablen ergebnis den wert ergebnis*n zuordnen soll gell? } #6 solange n ungleich 0 (! = bedeutet ungleich, == gleich und = ist im Gegensatz dazu eine Zuweisung) Ansonsten richtig. n-- nennt sich Dekrement und verringert um eins (n++, seines Zeichens Inkrement, macht das Gegenteil) #7 Ja stimmt,! = bedeutet ungleich, war grad auf dem falschen dampfer wegen fakultät und so *g*. Danke nochmal dann fehlt da doch im prinzip nur noch, dass wenn n=0 ist, dass er dann nochmal *(n-1) rechnen soll oder? Java: Fakultät einer natürlichen Zahl berechnen - Pixelfriedhof. weil die formel aus dem TW ist ja fakultät von n=1*2*3*... *(n-1)*n aber ich will das ja dann so mache fakultät von n=n*(n-1)*(n-1), ach so ne dann fehlt das nicht fällt mir grad auf, weil macht der ja automatisch, aber er müsste am anfang ja mit sich selbst multiplizieren also mit der zahl n (von der eingabe) oder macht er das sowie so?
3 Antworten Wenn die Implementierung " sehr wenig code " haben soll, liegt der Schluss nahe, dass die Lösung mit einer Rekursion umgesetzt werden soll. Zur Erinnerung: eine mögliche Definition für die Fakultät lautet: Definition: Fakultät (rekursiv) \(\forall n\in\mathbb{N}_0\):$$n! Iteration und Rekursion. = \begin{cases}1, & n=0\\n\cdot (n-1)!, & n\gt 0\end{cases}$$Da bereits eine mögliche Implementierung vorhanden ist, verwende ich zur Abwechslung den Elvis-Operator:-) static int faculty( final int n){ return n == 1 || n == 0? 1: n * faculty ( n -1);} Ob Du diese Funktion noch mit einem public Modifier versiehst, machst Du vom Kontext abhängig. Beantwortet 25 Nov 2017 von Gast
Lesezeit: 5 Minuten Benutzer907629 Ich lerne Java mit dem Buch Java: The Complete Reference. Aktuell beschäftige ich mich mit dem Thema Rekursion. Bitte beachten Sie: Es gibt ähnliche Fragen zu Stackoverflow. Ich habe sie durchsucht, aber keine Lösung für meine Frage gefunden. Ich bin mit der Logik im folgenden Programm verwirrt. Wenn ich das folgende Programm ausführe, erzeugt es die richtige Ausgabe, aber ich habe die Logik nicht verstanden. Ich habe die Logik in der folgenden Zeile nicht verstanden: Ergebnis = Tatsache(n-1) * n; Wenn wir meines Wissens den Wert von n = 4 übergeben, wie im folgenden Programm gezeigt, Dann wird 3 * 4 im Ergebnis gespeichert, dh 12. Auch hier wird fact(n-1) aufgerufen. Dann wird n 3. Dann wird die 2 * 3 im Ergebnis gespeichert und ersetzt die vorherigen 12. Java fakultät berechnen free. Ich denke, Sie haben verstanden, wo ich hochnäsig/verwirrt bin. Danke schön. class Calculation { int fact(int n) int result; if(n==1) return 1; result = fact(n-1) * n; return result;}} public class Factorial public static void main(String args[]) Calculation obj_one = new Calculation(); int a = (4); ("The factorial of the number is: " + a);}} Neigyl R. Noval Zuerst sollten Sie verstehen, wie die Fakultät funktioniert.
", 1, ()); assertEquals("Wrong! ", 2, ()); assertEquals("Wrong! ", 6, ()); assertEquals("Wrong! ", 24, ()); assertEquals("Wrong! ", 120, ()); assertEquals("Wrong! ", 720, ()); assertEquals("Wrong! ", 5040, ()); assertEquals("Wrong! ", 40320, ()); assertEquals("Wrong! ", 362880, ()); assertEquals("Wrong! Java fakultät berechnen di. ", 3628800, ());} von Zer0 (180 Punkte) - 23. 2014 um 02:56 Uhr Java-Code import; /** * Created by Zer0 on 23. 2014. public class FakultätRechner public static void main(String[] args) Scanner Input = new Scanner(); ("Geben Sie eine beliebige ganze Zahl ein, ich berechne für Sie die Fakultät" + " dieser Zahl. "); long result = xtLong(); if (result==0) ("Die Fakultät von 0 ist 1. ");} ("Die Fakultät von "+result+" ist "); for(long i=result-1; i>=1; i--) (result+". ");}}} von Dome (2100 Punkte) - 27. 2014 um 15:08 Uhr public class Fakultät{ long fak = 0; long i = 0; ("Fakultät von n: "); fak = xtLong(); if(fak! = 0){ for(i = 1; i <= fak; i++){ result *= i;}}else{ ("Ungültige Eingabe");} (result);}} von ElPapito (2690 Punkte) - 08.