Rekursion Fakultätsfunktion

BlackSalad

Bekanntes Mitglied
Hallo,

ich versuche gerade eigenständig drauf zu kommen wie ich die rekursive Variante der Fakultätsfunktion mache.

Mein Programm soll den eigegeben Parameter für n nehmen und von n dann die Fakultät also n! berechnen.
Leider scheitere ich an dem Programmgerüst irgendwie.

Ich möchte dann auch, dass das Ergebnis oder die zwischenschritte mit einem einfachen System.out.println() ausgegeben werden.
Leider kann ich aber nur innerhalb der Methode "public static void main(String[] args)" diesen Befehl zur ausgabe nutzen.

Und ich habe das Problem, dass meine Klasse FunktionRekursiv nicht weiß was n für ein Parameter ist.

Wie muss ich das denn machen damit es funktioniert?


Danke schonmal :)


Hier mein Code:



Java:
public class FakultaetRekursiv {
	

	public static void main(String[] args){
		
	int n=Integer.parseInt(args[0]);
	}
	
	static long FunktionRekursiv (int n) {
		if (n==1){
			return 1;
		}
		else {
			return n*FunktionRekursiv(n-1);
		}
		
	}
	
	
}
 
G

Gast2

Gast
1) Erstelle in der main eine Instanz der Klasse
2) speicher die Änderungen in n
3) gebe das Resultat aus.

Freihand ohne Gewähr:

Java:
public class FakultaetRekursiv {

    FakultaetRekursiv(int n) {
            System.out.println(funktionRekursiv(n));
    }

    public static void main(String[] args){		
	    new FakultaetRekursiv(Integer.parseInt(args[0]));
    }
	
    private int funktionRekursiv (int n) {
	if (n==1){
		return 1;
	}
	 else {
		return n = n*funktionRekursiv(n-1);
	}		
    }
	
	
}

PS: Funktionen schreibt man klein
 
Zuletzt bearbeitet von einem Moderator:

0x7F800000

Top Contributor
Leider scheitere ich an dem Programmgerüst irgendwie.
du scheiterst daran, dass java keine nested functions unterstützt. Deine fakultätsfunktion muss neben der main stehen, nicht in der main.
Ich möchte dann auch, dass das Ergebnis oder die zwischenschritte mit einem einfachen System.out.println() ausgegeben werden.
Leider kann ich aber nur innerhalb der Methode "public static void main(String[] args)" diesen Befehl zur ausgabe nutzen.
wie kommst du denn darauf? Du kannst den überall nutzen. Pack's einfach direkt vor dem rekursiven aufruf in deine fakultätsfunktion rein.

Und ich habe das Problem, dass meine Klasse FunktionRekursiv nicht weiß was n für ein Parameter ist.

Wie muss ich das denn machen damit es funktioniert?
1) funktion ordernlich definieren (außerhalb der main)
2) funktion mit dem geparsten parameter aufrufen (in der main)

EDIT:
1) Mache n zu einem Klassen Attribut
2) Erstelle in der main eine Instanz der Klasse
3) speicher die Änderungen in n
das kann doch nicht dein ernst sein? :autsch: Also, nur so zur info: nein, man instanziiert keine neuen Objekte, um eine statische methode aufzurufen.

Java:
public class FakultaetRekursiv {
    
    public static void main(String[] args){
    	int n = Integer.parseInt(args[0]);
    	System.out.println(funktionRekursiv(n));
    }
    
    static long funktionRekursiv (int n) {
        if (n==1){
            return 1;
        } else {
        	long temp = funktionRekursiv(n-1);
        	System.out.println("zwischenschritt: " + temp);
            return (n * temp);
        }
    }
}
Der original-code war schon fast korrekt, nur bisschen komisch eingerückt.
 
Zuletzt bearbeitet:

BlackSalad

Bekanntes Mitglied
Danke!

Was mir aber jetzt irgendwie unklar ist, ist folgendes:

Ich hab diese Zeile: "System.out.println(funktionRekursiv(n));" einfach noch in meinen Code eingefügt, jetzt funktioniert es wunderbar.

Aber ich verstehe nicht wieso es bevor ich diese Zeile eingefügt habe immer gemeint hat, dass es nicht weiß was n ist.

Hast du da vielleicht ne Idee für mich?

Ansonsten echt super. Wie man danna n so kleinen DIngen hängen kann. Vielen Dank!
 

BlackSalad

Bekanntes Mitglied
und
Java:
long temp = funktionRekursiv(n-1);
            System.out.println("zwischenschritt: " + temp);
            return (n * temp);

hast du nur geändert damit man den Zwischenschritt sieht oder?

Wenn man keinen Zwischenschritt ausgeben lassen will ist das nicht nötig, richtig?

Danke nochmal!
 

0x7F800000

Top Contributor
Die soll ja auch nicht statisch sein.
Fakultät ist eine klassische mathematische funktion, die frei von jeglichen Einstellungen und Konfigurationsmöglichkeiten einer natürlichen Zahl n eine andere natürliche Zahl n! zuordnet. Warum um Goslings Willen willst du bei jedem Aufruf einer solchen Funktion den Stack mit irgendwelchen Objekt-Instanzen vollstopfen? ???:L

Wenn man keinen Zwischenschritt ausgeben lassen will ist das nicht nötig, richtig?
Genau, wenn man das zwischenergebnis nicht sehen will (was praktisch immer der Fall ist), dann sind die zwei Zeilen überflüssig.

Aber ich verstehe nicht wieso es bevor ich diese Zeile eingefügt habe immer gemeint hat, dass es nicht weiß was n ist.
Wie, was? Wie lautete die fehlermeldung? Bzw. imho dürfte es da keine Fehlermeldungen geben, denn dein ursprünglicher code ist eigentlich ok, er tut nur nichts, weil du die methode nicht aufrufst.
 
G

Gast2

Gast
Ich ging davon aus, dass er den Zusammenhang von Main zu Geltungsbereich der instanzen ect. nicht verstanden hat. Daher habe ich eine Instanz in der main erzeugt.

Im RealLife hast du natürlich recht. Da programmiert man aber Fakultät nicht neu ;)
 

BlackSalad

Bekanntes Mitglied
Danke euch allen!

Jetzt hab ich nochmal ne Frage und zwar soll meine Funktion den größten gemeinsamen Teiler berechnen.
Allerdings tut sie das irgendwie fehlerhaft. Ich finde aber meinen Fehler nicht.

Java:
public class ggTklassisch {
	
	public static void main(String[] args){
		int a=Integer.parseInt(args[0]);
		int b=Integer.parseInt(args[1]);
		
		System.out.println(ggT(a, b));
	}

	static long ggT(int a , int b){
		
		if(a>b){
			return ggT(a-b,b);
		}
		else if (a<b){
			return ggT(a, b-a);
		}
		else {
			return a;
		}
	}
	
	
}
 

BlackSalad

Bekanntes Mitglied
ja habe ich. Er funktioniert auch für kleinere Zahlen bzw. für die die ich ausprobiert habe.

Aber für Testwerte die ich gefunden habe, funktioniert er nicht.
 

BlackSalad

Bekanntes Mitglied
Achso ;)


Ich habe als Testwert 3528 und 2100 genommen. Rauskommen soll 8.
Bei mir kommt aber 84 raus.

Bei 16 und 14 stimmt das ergebnis und bei anderen zahlen auch die ich ausprobiert habe. Aber bei dieser größeren stimmt es nicht. :noe:
 
G

Gast2

Gast
Warum sollte da 8 rauskommen ???:L
3528 / 84 = ganzzahl
2100 / 84 = ganzzahl
84 ist schon richtig.
 

BlackSalad

Bekanntes Mitglied
Dann find ichs super, dass meine Uni fehler in ihren Vorlesungsfolien hat :eek:

Danke. Dann hat sich das erledigt... Hab bei nem anderen Zahlenbeispiel auch nachgerechnet und auch das wurde falsch angegeben. :noe:

Vielen Dank!!
 

Dekker

Bekanntes Mitglied
Dann find ichs super, dass meine Uni fehler in ihren Vorlesungsfolien hat :eek:

Danke. Dann hat sich das erledigt... Hab bei nem anderen Zahlenbeispiel auch nachgerechnet und auch das wurde falsch angegeben. :noe:

Vielen Dank!!

Das Fehler auf Folien sind kommt immer mal vor, dass hat wenig mit der Qualität deiner Uni zu tun. Ab und an sollte man halt mal selbst prüfen ob das was auf den Folien steht stimmt oder eben nicht.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Rekursion mit Fakultätsfunktion Java Basics - Anfänger-Themen 20
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
M Variablen Rekursion mit 2 Parameteren Java Basics - Anfänger-Themen 4
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
M Lösungsweg Rekursion Java Basics - Anfänger-Themen 1
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
D Rekursion - Ich raffs nicht Java Basics - Anfänger-Themen 16
N Methoden Rekursion mit Kreisen Java Basics - Anfänger-Themen 7
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
J Rekursion Java Basics - Anfänger-Themen 22
T Rekursion Programmierverständnis Java Basics - Anfänger-Themen 12
K Rekursion: Rechenmauer mit Array erstellen Java Basics - Anfänger-Themen 17
K Rekursion einer Zahlenfolge (Ab- und Aufzählung) Java Basics - Anfänger-Themen 6
Zeppi Rekursion Java Basics - Anfänger-Themen 15
V Backtracking und Rekursion Java Basics - Anfänger-Themen 15
L REKURSION Java Basics - Anfänger-Themen 13
Kirby.exe Rekursion Java Basics - Anfänger-Themen 7
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
X Rekursion Java Basics - Anfänger-Themen 3
H Rekursion Java Basics - Anfänger-Themen 2
D Erste Schritte Rekursion Java Basics - Anfänger-Themen 13
M Rekursion Tage Ansteckung gesamte Bevölkerung Java Basics - Anfänger-Themen 15
M Java Rekursion Java Basics - Anfänger-Themen 9
G Java Rekursion Java Basics - Anfänger-Themen 5
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
N Rekursion Java Basics - Anfänger-Themen 18
M Verständnisproblem der Rekursion bei Arrays Java Basics - Anfänger-Themen 8
X Rekursion Rätsel Java Basics - Anfänger-Themen 4
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
W Rekursion Java Basics - Anfänger-Themen 0
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
N Rekursion Java Basics - Anfänger-Themen 1
B Rekursion Basic Java Basics - Anfänger-Themen 15
O Rekursion Mergesort Java Basics - Anfänger-Themen 18
G Rekursion Java Basics - Anfänger-Themen 20
M Rekursion Java Basics - Anfänger-Themen 7
F Hilfe bei Rekursion... Java Basics - Anfänger-Themen 4
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
B Rekursion Wurzel Java Basics - Anfänger-Themen 39
O Rekursion ordentlich aufschreiben Java Basics - Anfänger-Themen 2
B Rekursion verstehen Java Basics - Anfänger-Themen 4
O Rekursion Java Basics - Anfänger-Themen 2
E Rekursion verstehen. Java Basics - Anfänger-Themen 4
E Rekursion Kisten befüllen Java Basics - Anfänger-Themen 10
E Rekursion verstehen Java Basics - Anfänger-Themen 2
O Rekursion, String Java Basics - Anfänger-Themen 8
N Invertierte Rekursion??? Java Basics - Anfänger-Themen 5
M Bitte um Hilfe bei Quellcode (Rekursion) Java Basics - Anfänger-Themen 6
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
L Rekursion im Baum Java Basics - Anfänger-Themen 9
E Pfade eines Baums angeben ohne Rekursion Java Basics - Anfänger-Themen 20
L Rekursion Baumknoten Java Basics - Anfänger-Themen 8
L Rekursion größtes Zeichen Java Basics - Anfänger-Themen 8
L Rekursion Modulo Java Basics - Anfänger-Themen 7
I Rekursion Java Basics - Anfänger-Themen 11
H Rekursion Java Basics - Anfänger-Themen 7
N Methoden zur Rekursion (catalansche Zahlen) Java Basics - Anfänger-Themen 4
S Frage zu Rekursion... Java Basics - Anfänger-Themen 15
N Java catalansche Zahlen (Rekursion) Java Basics - Anfänger-Themen 5
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
S Frage zu einer Rekursion Java Basics - Anfänger-Themen 15
F Methoden Abbruchbedingung bei Rekursion Java Basics - Anfänger-Themen 2
Z Rekursion Primzahlen Java Basics - Anfänger-Themen 1
K Rekursion Verständnisfrage Java Basics - Anfänger-Themen 19
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
M Rekursion Minimums Suche Java Basics - Anfänger-Themen 12
J Rekursion Java Basics - Anfänger-Themen 5
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
N Rekursion Java Basics - Anfänger-Themen 2
B Rekursion - Übung Java Basics - Anfänger-Themen 2
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
P Rekursion Java Basics - Anfänger-Themen 19
G Rekursion Beispiel Java Basics - Anfänger-Themen 3
M Rekursion schreiben Java Basics - Anfänger-Themen 16
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 9
T Array Rekursion Java Basics - Anfänger-Themen 1
B lineare und schlichte Rekursion Java Basics - Anfänger-Themen 1
A Rekursion Java Basics - Anfänger-Themen 2
B Rekursion Java Basics - Anfänger-Themen 3
A Rekursion stoppt an der falschen Stelle Java Basics - Anfänger-Themen 4
A Lineare Rekursion Java Basics - Anfänger-Themen 6
P Hilfe zur Rekursion? Java Basics - Anfänger-Themen 2
B Rekursion Schneeflocke - Kurze Frage zur Methode Java Basics - Anfänger-Themen 11
L Rekursion Java Basics - Anfänger-Themen 4
S Rekursion Rückgabe - Türme von Hanoi Java Basics - Anfänger-Themen 16
kilopack15 Rekursion und Schleifen Java Basics - Anfänger-Themen 27
E Rekursion Java Basics - Anfänger-Themen 10
G rekursion nicht verstanden Java Basics - Anfänger-Themen 5
K Rekursion-Verständnisfrage Java Basics - Anfänger-Themen 4
E Methoden String wird in Rekursion nicht überschrieben Java Basics - Anfänger-Themen 2
T 2fach Rekursion. Java Basics - Anfänger-Themen 4
N Rekursion mit if-Anweisung Java Basics - Anfänger-Themen 10
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
P Methoden Primzahltest mit Rekursion Java Basics - Anfänger-Themen 3
C Rekursion überführen in eine normale methode Java Basics - Anfänger-Themen 1

Ähnliche Java Themen


Oben