Fibonacci, Fakultaet, GGT

Melisa

Mitglied
Hallo Leute, in der Uni haben wir vor kurzem mit Java angevangen und ich habe ein Projekt, das so aussieht

public class HelloJavaImpl implements HelloJava {

public int fib(int n) {
if((n==0) || (n==1)) //fib(0)=0; fib(1)=1
return n;
else
return fib(n-1) + fib(n-2);
}

public int fac(int n) {
if((n==0) || (n==1))
return 1;
if(n<0)
return -1;
else
return fac(n-1)*n;
}

public int ggT(int a, int b) {
int min = Math.min(a,b); //Ich habe schon kleinere Zahl
for(int i=min; i>=2; i--){ //Ich teste alle Zahle bis zur Zwei
//Wenn bis dahib kein ggt gefunden wurde, bleibt nur die 1
if(a%i==0 && b%i==0)
return i;
}return 1; //Falls kein ggt gefunden wurde
}

}
ich weiss nicht, was ich machen soll um das Program zu funktionieren. Bitte helft mir
 

jgh

Top Contributor
wie kann man das eigentlich so häufig überlesen....???

[edit]ok, mit einem hübschen Bild darf man alles :)
image.php
[/edit]
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    28,6 KB · Aufrufe: 43
Zuletzt bearbeitet:

Melisa

Mitglied
Ja ich weiss, dass ich main Methode brauche aber genau das verstehe ich nicht, wie soll ich main Methode schreiben.
Ich bin Anfaenger und verstehe ich nicht wie Unterprogramme aufgerufen werden sollen.
 

jgh

Top Contributor
jojo... dir fehlt -wie schon erwähnt- die main-Methode...hier mal ein rudimentäres Bsp dafür...:

Java:
public class HelloJavaImpl implements HelloJava {

	public static void main(String[] args) {
		HelloJavaImpl hji = new HelloJavaImpl();
		System.out.println("Fakultäten:");
		for (int i = 0; i < 15; i++) {
			System.out.println("\tDie Fakultät von " + i + " ist= "
					+ hji.fac(i));
		}
		System.out.println("\nFibonacci: (die ersten 25 Glieder)");
		for (int i = 0; i < 25; i++) {
			System.out.print(hji.fib(i) + ", ");
		}

		System.out.println("\nGGT von 88 und 983252");
		System.out.println("\t" + hji.ggT(88, 252));
	}

	public int fib(int n) {
		if ((n == 0) || (n == 1)) // fib(0)=0; fib(1)=1
			return n;
		else
			return fib(n - 1) + fib(n - 2);
	}

	public int fac(int n) {
		if ((n == 0) || (n == 1))
			return 1;
		if (n < 0)
			return -1;
		else
			return fac(n - 1) * n;
	}

	public int ggT(int a, int b) {
		int min = Math.min(a, b); // Ich habe schon kleinere Zahl
		for (int i = min; i >= 2; i--) { // Ich teste alle Zahle bis zur Zwei
			// Wenn bis dahib kein ggt gefunden wurde, bleibt nur die 1
			if (a % i == 0 && b % i == 0)
				return i;
		}
		return 1; // Falls kein ggt gefunden wurde
	}

}
 

Melisa

Mitglied
jgh vielen vieleen vieeleeen Dank, du hast mir geholfen, schon 2 Tagen sitze ich am Komputer und versuche diese Ahufgabe zu loesen. Danke dir
 

AquaBall

Top Contributor
btw:
[STRIKE]die fac() ist inhaltlich falsch.

0! == 0[/STRIKE] Sorry, war Fehlinfo von mir! Danke an jgh.
0! == 1 Erstaunt mich zwar, ist aber als Null-Element der Multiplikation nachvollziehbar
1! == 1

Aber
(-n)! == undefiniert! Da sollte ein Error oder eine exception kommen! oder NaN zurückgeben
und warum wird das für fib(-n) nicht überprüft?

Eine Rückgabe von (-1) ist für "Fehlermarkierung"
  • eine antike Methode
  • in Java nicht mehr zeitgemäß
  • verlangt vom Benutzer dieser Klasse hohe Disziplin.
  • sehr fehleranfällig

(Was, wenn der Benutzer den Rückgabewert "blind" weiterverwendet?
Selbst Schuld vom Benutzer?
oder ist der Designer der Classe zu bequem, nicht gründlich genug?)
 
Zuletzt bearbeitet:

jgh

Top Contributor
btw die Fakultät von 0 ist 1.

[edit] aber bei den grundsätzlichen Sachen(negativen Zahlen und Rückgabe von -1) gebe ich dir Recht ;)[/edit]
 
Zuletzt bearbeitet:

snm

Mitglied
Man kann den ggt übrigens auch mit dem euklidischen Algorhithmus berechnen. Deine Lösung ist zwar auch richtig, aber sie basiert noch auf Ausprobieren. Ich finde auch, dass sich sowas prima zum Einsetzen von Rekursivität lohnt.

Bei Interesse kannst du dir das ja mal durchlesen ;)
Euklidischer Algorithmus

Der Code ist dann auch viel kürzer, indem man die Methode in sich selbst mit den anderen Werten neu aufruft, bis der GGT gefunden wurde.

Java:
public static int GGT(int a, int b){
		if (b == 0)
			return a;
		return GGT(b, a % b);
		}

Man kann das sogar noch etwas verkürzen, indem man eine Kurzform wählt, was aber im Endeffekt dasselbe bedeutet:
Java:
public static int GGT(int a, int b){
		return b == 0 ? a : GGT (b, a % b);
}

Ich hoffe ich konnte dir damit ein paar Tipps geben, wie man seinen Code verbessern kann, immerhin ist die Methode bei größeren Zahlen auch erheblich schneller ;)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Abwandlung der Fibonacci Folge Java Basics - Anfänger-Themen 3
T Fibonacci mit einer Hilfsmethode berechnen Java Basics - Anfänger-Themen 10
123456789sssssaaaa Which is the best way to Print Fibonacci Series in Java? Java Basics - Anfänger-Themen 3
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
J Fibonacci-Reihe Java Basics - Anfänger-Themen 12
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
B Fibonacci Zahlen dynamische Programmierung Java Basics - Anfänger-Themen 7
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
V Fibonacci Folge Java Basics - Anfänger-Themen 4
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
A Fibonacci Zahlen Java Basics - Anfänger-Themen 1
M Methoden Fibonacci-Folge Java Basics - Anfänger-Themen 6
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
P Fibonacci -Verallgemeintert Java Basics - Anfänger-Themen 2
K Methoden Fibonacci in Array mit rekursiver Methoden Java Basics - Anfänger-Themen 19
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
K Fibonacci Zahlen Java Basics - Anfänger-Themen 3
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M Fibonacci-Folge mit while-Schleife Java Basics - Anfänger-Themen 4
P fibonacci - do while Statement Logik Fehler Java Basics - Anfänger-Themen 5
A Fibonacci-numbers Java Basics - Anfänger-Themen 9
K Rekursion Fibonacci Java Basics - Anfänger-Themen 3
J Fibonacci Zahlen berechnen Java Basics - Anfänger-Themen 3
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
Z Fibonacci Array Erklärung Java Basics - Anfänger-Themen 5
A Gerade Terme der Fibonacci-Folge aufsummieren Java Basics - Anfänger-Themen 12
C Fibonacci Zahlen Java Basics - Anfänger-Themen 7
J Ausgabe der fibonacci Zahlen Java Basics - Anfänger-Themen 4
S Fibonacci Folge Java Basics - Anfänger-Themen 34
D Fibonacci Java Basics - Anfänger-Themen 11
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
W Fibonacci Zahlenberechnung Java Basics - Anfänger-Themen 9
X Fibonacci mit durchschnittlicher Zeit Java Basics - Anfänger-Themen 5
I Fibonacci-Folge , direkter Weg. Java Basics - Anfänger-Themen 5
G Fibonacci Algorithmus Java Basics - Anfänger-Themen 22
0 Fibonacci Zahlen seeeehr schnell berechnen Java Basics - Anfänger-Themen 9
S Fibonacci Rückrechnung! Java Basics - Anfänger-Themen 5
K Fibonacci Zahlen Java Basics - Anfänger-Themen 2
K Programmieren von den ersten 70 Fibonacci-Zahlen Java Basics - Anfänger-Themen 2
G fibonacci was stimmt an meinem code nicht? Java Basics - Anfänger-Themen 2
S Fibonacci Zahlenvergeich Java Basics - Anfänger-Themen 6
G Iterativer Algorithmus zur Berechnung der Fibonacci Zahlen Java Basics - Anfänger-Themen 1
P Fibonacci-Zahlen Java Basics - Anfänger-Themen 6
J Rekursive Methode: Fakultaet berechnen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben