Aufgabe 4.2.


ich meinte in einer nebenfunktion aber ich probiers obs auch ohne geht


Dass das kaum noch was mit Rekursion zu tun hat, …

In der enTrekursivierten Variante ist das dann ok


Die Frage bzgl. des Wertebereichs verwirrt mich etwas… ich hab die gegebene Funktion end- und entrekursiviert und letztlich geben bei mir alle das gleiche aus, auch die iterative Variante (für n > 33 auch die selben “falschen” Werte).
Ich gebe zwar zu, dass ich mir das erstmal gründlich mit Stift und Papier überlegt habe, aber so “genial” kommt mir das Ganze jetzt doch nicht vor… und verunsichert mich jetzt ein wenig :stuck_out_tongue:


hmm…

ich bin mir generell bei dem begründen unsicher.

Wie muss ich denn das ganze begründen mit den werten? Also bei mir kommt am wert 34 zahlen mit nem - davor. davor stimmt es allerdings. und wie soll ich den werrtebereich einschränken? Soll das in den Code?

Also soll da in den code, dass zb ne meldung kommt für n>33 ? oder soll ich das einfach in das pdf schreiben?


Es steht doch nur drin begründen oder? Also einfach erklären warum auf einmal die Werte bei einem bestimmten n ein Minuszeichen davor haben.

Der Code muss nur bis 14 funktioniere , d.h. wenn er über 33 ‘Mist’ baut, dann hast du ja trotzdem deine Aufgabe erfüllt, also nix extra abfangen in Code.


okay danke!

Also muss ich nix beweisen oder so, sondern nur paar sätze wieso der bei 34 durchdreht?


Begründen, ja :slight_smile:


also ich denke s reicht, wenn man kurz sagt warum die Funktion über 34 keine korrekten Ergebnisse liefert.

Wo ich mir nicht so sicher bin ist bei diesem Teil “Beschreiben Sie möglichst genau, wie Sie die Methode cn(long n) in eine endrekursive
Implementierung überführen würden. Begründen Sie dabei jeweils Ihre Änderungen an der
Schnittstelle und am Rumpf der Methode.”

Wieviel soll man da schreiben und man sieht doch am Code wie ich es getan habe? und wie soll ich das ganze begründen? Ich habs halt gemacht, damit es endrekursiv wird.


Ja, aber wieso braucht deine Methoden diese Änderungen? Wieso kann man sie nicht auch weglassen??
Die Antworten darauf können, je nach Ausformulierung, schon ein bisschen füllen.

Bzw., was vllt auch gut ist, was genau muss man denn machen um eine Funktion zu endrekursivieren? :slight_smile:


Naja das steht eigentlich nicht in der Aufgabe. Es ist ja nicht nach der Änderung gegenüber der BigInteger Methode gefragt, sondern gegenüber der cn(long) Funktion. Und wenn sich da nichts ändert…


was soll man denn dann in der Aufgabe machen?


Ich hätte auch mal noch ne Frage.

Ich dachte nicht, dass ich so ein Problem kriege, ausgerechnet mit der iterativen Implementierung.

Ich kriege in dieser Zeile:

System.out.printf("%1$-5d\t%2$-18d\t%3$s\n", n, cnIterativ(n), cnBigInt(BigInteger.valueOf(n)).toString());

diesen Fehler: Cannot make a static reference to the non-static method cnIterativ(long) from the type Catalan at Catalan.main

Hat Jemand ne Idee?


haste das static weggelassen?


@ wishes

…sagen, dass sich nichts ändert.

In der b) steht die Frage dann ja nochmal, und selbst wenn du die Variante mit n<=14 hast (habe ich), ändert sich nichts mehr gegenüber der a).

Schreib so wie es ist.


DANKE!

Boah hat ich einfach vergessen und nicht gemerkt.

Jetzt is aber was komisch. Bei mir kommt jetzt an stelle 33 schon das minus und nicht erst bei n=34.


Ich hoffe, dass sie sich damit dann auch wirklich zufrieden geben…

Für alle, die ihre Funktion nicht nur mit der BigInteger-Version vergleichen wollen, einfach die 3 Zeilen in der Main-Funktion ersetzen und bei cn_iterativRec den eigenen Funktionsnamen und Parameter einfügen.

		System.out.printf("%1$-5s\t%2$-18s\t%3$-18s\t%4$s\n", "n", "cn(n)", "Eigene Funktion", "cnBigInt");
		for (int n = 0; n < 80; n++)
			System.out.printf("%1$-5d\t%2$-18d\t%3$-18d\t%4$s\n", n, cn(n), cn_iterativRec(n, 0, 0), cnBigInt(BigInteger.valueOf(n)).toString());

also nach dem ganzen durchlesen hier weiß ich jetzt auch nicht mehr, was wir nun begründen sollen.

ich hab die beiden Funktionen. also endrekursiv und iterativ. Nur was muss ich nun schreiben?


ich sitzt jetzt hier schon seit stunden und komm dummerweise einfach net drauf, woran es liegen könnte, das beide Funktionen die ich erstellt habe bereits bei 3 falsche ergebnise liefern… woran könnte das liegen? hab schon alles ausprobiert woran es meiner meinung nach hätte liegen können…


Bei der Verwendung von Gleitkommazahlen können immer komische Rundungsfehler auftreten - falls du da welche verwendet hast, ich würd versuchen es bleiben zu lassen.


Probier doch erstmal die eine Funktion zum laufen zu bringen, dann dürfte die zweite eigentlich kein Problem mehr sein.
Für mehr Hilfe musst du aber schon ein bisschen genauer posten was du mit ‘falsche Ergebnisse’ meinst :wink:

Vorsicht beim verweden von double! Ein paar Seiten vorher in diesem Thread stand eine ausdrückliche Warnung, dass double minus Punkte geben. Just FYI :slight_smile: