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
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.
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?
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…
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());
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
Vorsicht beim verweden von double! Ein paar Seiten vorher in diesem Thread stand eine ausdrückliche Warnung, dass double minus Punkte geben. Just FYI