Aufgabe 4.2.

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 4.2.
Ich habe echt ein Problem mit der Endrekursion. Ich hab zwar das Beispiel in der Vorlesung mit der Summe verstanden, aber wüsste jetzt eben nicht, wie ich aus ner anderen Rekursionsfunktion mit Multiplikation z.B. eben, ne endrekursive Variante basteln könnte. Leider war ich da auch im Internet nicht sonderlich fündig, was andere Beispiele für Endrekursion angeht.
Kann mir da jemand weiterhelfen?


Schau dir nochmal die Folie Seite 44 an, die hat zumindest mir sehr geholfen.

Ist zwar recht theoretisch, wenn man es allerdings stur durchzieht haut es aber ganz gut hin :wink:


Die Folien kenn ich mittlerweile fast auswendig, ich kriegs aber trotzdem nicht gebacken…ich krieg eben nur das eine Bsp. durchdacht, kann es aber nicht übertragen.


Auf die Gefahr hin, dass ich dich nerve:

Endrekursiv heißt ja, dass der rekursive Aufruf als letztes in einem Zweig stattfindet. Also, muss deine Funktion auch alles mitbekommen was sie zur Berechnug braucht, da ja auf dem ‘Rückweg’ nichts mehr gerechnet wird.

Jetzt schau dir doch mal die Ergebnisse für niedriges n an, und schau dann in deiner Funktion was sie brauchen könnte, damit das gleiche rauskommt. Am besten einfach mal hinmalen.

Die Aufgabe funktionier eigentlich genauso wie die mit der Summe.

Hoffe das hilft :slight_smile:


Wobei die Summe nicht nur auf den ersten Blick kommutativ ist.


Und das genau ist mein Problem: ich hab keine Ahnung, wie ich drauf kommen soll, was die Funktion im letzten Aufruf mitbekommen soll…da steckt für mich ja das doofe cn(n-1) drin…wie rechne ich das ohne das aus?


Also nach etlicher Denkarbeit bin ich endlich drauf gekommen. Und bevor es noch jemandem passiert: denkt daran, dass die Zahlen-Reihe mit 0 (und damit Wert 1) beginnt.

@Maylis: Du musst dir überlegen, was cn(n - 1) eigentlich ist. Nämlich die Zahl, die vor der Zahl kommt, die du berechnen möchtest. Also musst du herausfinden, wie du bis ganz zum Anfang der Folge kommst… Hilfsvariablen helfen weiter :wink:


Wie gesagt, ein konkretes n rauspicken und dann einfach mal hinmalen. Hilft wirklich :wink:


Jetzt hätte ich auch mal eine kleine Frage dazu.
Die Methoden habe ich implementiert, aber was genau ist mit Wertebereich gemeint?

Da kommt doch das selbe raus bei allen, also warum sollte sich das ändern?
Könnte mir das kurz einer eklären, ich steh da leider auf dem Schlauch :rolleyes:


Spiel doch einfach mal mit den Eingabewerten (auch mit hohen)


Wenn du wirklich alle n einsetzten kannst und das Ergebnis stimmt, dann Respekt, deine Methode ist geil! :smiley:

Ansonsten schränk lieber den Wertebereich ein. Ist das gleiche Prinzip wie bei manchen Funktionen in Mathe (z.B. Wurzel aus x).


Ok also ich versteh jetzt zumindest glaube ich was gemeint ist.

Danke :slight_smile:

Allerdings kommt bei mir wirklich immer 1:1 das selbe wie bei der “normalen” cn raus.
Dann stimmt wohl was nicht oder? Denn ich denke nicht, dass meine Methoden besonders geil sind :smiley:


Ist bei mir übrigens auch so. Bis 33 kommen bei mir identische Werte raus. Danach werden die Zahlen ja negativ. Aber selbst die negativen Zahlen sind gleich. Und dass ich eine geniale Lösung gefunden habe, glaube ich auch eher nicht…


Ja, genau so ist es bei mir auch! Auch bis 33.


Besser als meine allemal, die geht nur bis 14 :wink:


Reicht ja auch, solange du begruendest, woran es liegt. Aber man kanns so umbauen, dass es mit long auch bei der endrekursiven und der iterativen Variante bis 33 geht (sogar bis 34, was die vorgegebene nicht endrekursive Funktion nicht schafft). Allerdings finde ich diese Variante nicht schoen…


Das schreit ja förmlich nach nochmal anschauen <_<

:wink:


Geht 0.99999999999999 als 1 durch? :smiley:


[quote=ri31hoky]
Geht 0.99999999999999 als 1 durch? :smiley:
[/quote]Naja, eigentlich sollten wir den Algorithmus doch nur in eine andere Variante uebertragen. Ich hab das bisher so interpretiert, dass wir die Datentypen nicht aendern sollen. Und es steht ja auch da, dass 0<=n<=14 schon reicht, also braucht man auch nichts groesseres als long.