Hi, ich tue mich mit Rekursion schwer. Wie würde man diese Gleichung in C oder irgendeiner Phantasie-Programmiersprache angehen?
Suchst du einen Dummen, der dir deine Hausaufgaben macht? Schreibe deine Lösung hin, dann findet sich jemand der dich auf Fehler aufmerksam macht.
Das ist keine Hausaufgabe, sondern entstammt einem kürzlich online bei Spektrum der Wissenschaft erschienenen Artikel. Ich nehme an, der TO möchte einfach nur (aus Neugierde?) etwas den Artikel vertiefen und etwas mit der Formel praktisch herumspielen.
Also kein Grund, gleich im ersten Antwort-Post gleich so agressiv zu werden. Leute, würdet Ihr Jemandem bei einem Bier auch so rotzig daherkommen?
Wie würde man diese Gleichung in C oder irgendeiner Phantasie-Programmiersprache angehen?
So, wie es da steht. Allerdings musst du selber herausfinden, ob die Rekursion auch mal abbricht, oder n so groß wird, daß es den Zahlenbereich deiner Variablen überschreitet, oder was da sonst noch so passieren kann.
Oliver
Wie würde man diese Gleichung in C oder irgendeiner Phantasie-Programmiersprache angehen?
In "phantastischem" Haskell:
1 |
|
2 |
|
Das ist die Originalformel mit etwas anders angeordneten Elementen. Da die zweite Bedingung (n > 100) alle verbleibenden Fälle abdeckt, kann man sie auch durch "otherwise" ersetzen:
1 |
|
2 |
|
Das ist keine Hausaufgabe, sondern entstammt einem kürzlich online bei Spektrum der Wissenschaft erschienenen Artikel.
Die Formel ist eigentlich ziemlich unspektakulär. Wer sich dennoch dafür interessiert:
https://www.spektrum.de/kolumne/mccarthy-91-funktion-die-sinn...
Spektrum wird auch immer schlechter. Solchen trivialen Mist bauschen die zum Artikel auf, naja von nem Astronomen kann man auch nicht mehr erwarten.
Spektrum = neues PM Magazin
gleich so agressiv zu werden.
Ich war zu keiner Zeit aggressiv. Es gehört zum guten Ton sich selbst erst mal etwas Mühe zu geben und nicht einfach eine Aufgabe hier rein zu posten die nach einer Hausaufgabe / Übung aussieht.
Siehe: Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
In "phantastischem" Haskell:
Was hat das mit der Frage zu tun? Willst du hier rumposen mit deinem akademisch-nutzlosen Sprachspielzeug?
Mit welchem Wert soll M starten?
Spektrum wird auch immer schlechter. Solchen trivialen Mist bauschen die zum Artikel auf, naja von nem Astronomen kann man auch nicht mehr erwarten.
Ich habe mich gefragt, warum überhaupt McCarthy, von dem die Formel stammt, solchen "trivialen Mist" veröffentlicht hat. Der Autor des Spektrum-Artikels hat es leider versäumt, mehr zu den Hintergründen zu erzählen.
Gerade entdeckt:
https://en.wikipedia.org/wiki/McCarthy_91_function
Da gibt es auch Code-Beispiele in verschiedenen Programmiersprachen.
Mit welchem Wert soll M starten?
Wie meinst du das? Das Argument der Funkton M kann ein beliebiges Element aus ℤ sein.
Für M ist 1 :
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
Wenn dich so ein Kinderkram schon geistig überfordert, lass die Finger vom Programmieren.
Oh, die Formel mag trivial erscheinen, aber die Lösung zwingt den "Mikrocontroller" dazu, zur Laufzeit emsig die Register auszutauschen!!! Wenn da mal nicht der Stackpointer überläuft!!! 😄 Ich bin das Problem gänzlich falsch angegangen, ich dachte, ich müsste ein Array aufmachen und jedes Element markieren als undefiniert oder berechnet. Die fertige Lösung ist da fast trivial, man (ich) sollte sie um Ausgaben ergänzen, so dass man sieht, was der uC macht!!!
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Yalu X. schrieb:
In "phantastischem" Haskell:
Was hat das mit der Frage zu tun?
Es ist die (bzw. eine) Antwort darauf.
Willst du hier rumposen mit deinem akademisch-nutzlosen Sprachspielzeug?
Der Titel des Spektrum-Artikels lautet "Auch sinnlose Formeln haben ihren Wert". Für "sinnlose" Formeln ist doch ein "akademisch-nutzloses Sprachspielzeug", wie du es nennst, geradezu prädestiniert :)
Wenn dich so ein Kinderkram schon geistig überfordert, lass die Finger vom Programmieren.
In "phantastischem" Haskell:
Was hat das mit der Frage zu tun? Willst du hier rumposen mit deinem akademisch-nutzlosen Sprachspielzeug?
So, damit du dich noch mehr ärgerst und dein Blutdruck steigt, mal sehen ob ich das noch in Erlang hin bekomme.
Jeweils mit einer Guard-Sequence:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
Eine Guard-Sequence eingespart:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
Oh, die Formel mag trivial erscheinen, aber die Lösung zwingt den "Mikrocontroller" dazu, zur Laufzeit emsig die Register auszutauschen!!! Wenn da mal nicht der Stackpointer überläuft!!! 😄
Im oben verlinkten Wikipedia-Artikel wird auch eine endrekursive Variante der Funktion vorgestellt, die die meisten C-Compiler in eine einfache Schleife (ohne Rekursion) übersetzen.
Um die Rekursion zu lösen, muss man erst einmal die Rekursion lösen. Sonst wird das nichts.
≤
Ist das tatsächlich ein Operator in Haskell? Wie tippe ich den ein?
Dazu haben die Herren Dunning und Kruger sicher auch noch was zu sagen.
Hallo
Wenn dich so ein Kinderkram schon geistig überfordert, lass die Finger vom Programmieren.
Eine ziemlich arrogante und weltfremde Aussage. Geh mal in eine Fußgängerzone, einen Discounter, eine Werkstatt,... und frage was Rekursion ist....
Unter 100 Leuten werden dir vielleicht 2 Leute das beantworten können. (Und nein, der Campus einer technischen Hochschule oder die Halle, in der eine Matheolympiade stattfindet, sind nicht "zugelassen")
Besuche mal eine Schulklasse, die aus Kindern -ist ja Kinderkram (und nicht Jugendliche aus der Oberstufe eines Gymnasiums) besteht und zeige ihnen gerne zusammen mit der Lehrerin die Kinderkramformel...
Du wirst erstaunt sein festzustellen, dass diese Formel kein Kinderkram ist.
Ich würde dir raten, mal im normalen Leben anzukommen und ein wenig über deine Wortwahl und Bewertung deiner Mitmenschen nachzudenken.
Wer überhaupt nur andeutungsweise etwas mit solchen Formeln und Begriffen anfangen kann, wird ganz bestimmt nicht so leicht geistig überfordert und besitzt mehr mathematische Fähigkeiten als wohl 90% der Weltbevölkerung.
Yalu X. schrieb:
≤
Ist das tatsächlich ein Operator in Haskell?
Der Operator ist in Prelude.Unicode aus dem Package base-unicode-symbols definiert:
1 |
|
Neben ≤ und ≥ kommt man damit u.a. in den Genuss der Operatoren ≠, ∧, ∨ ∈ und ∉ sowie der Variable π und der Datentypen ℤ und ℚ. In anderen Modulen sind noch weitere Unicode-Symbole definiert.
Wie tippe ich den ein?
In Vim:
Strg+K = <
In X (mit Compose-Key, bei mir ist das die rechte Strg-Taste):
<compose> < =
Wenn dich so ein Kinderkram schon geistig überfordert, lass die Finger vom Programmieren.
Wenn Dich der Umgang mit Dich nicht interessierenden Fragen überfordert, lass die Finger von diesem Forum!
Neben ≤ und ≥ kommt man damit u.a. in den Genuss der Operatoren ≠, ∧, ∨ ∈ und ∉ sowie der Variable π und der Datentypen ℤ und ℚ. In anderen Modulen sind noch weitere Unicode-Symbole definiert.
Das ist zwar irgendwie nett, wäre mir aber zu umständlich einzugeben.
Yalu X. schrieb:
Neben ≤ und ≥ kommt man damit u.a. in den Genuss der Operatoren ≠, ∧, ∨ ∈ und ∉ sowie der Variable π und der Datentypen ℤ und ℚ. In anderen Modulen sind noch weitere Unicode-Symbole definiert.
Das ist zwar irgendwie nett, wäre mir aber zu umständlich einzugeben.
Man muss diese Unicode-Zeichen nicht benutzen, und die wenigsten Leute tun dies. Auch ich bin grundsätzlich der Meinung, dass im Quelltext von Programmen außerhalb von String-Literalen ausschließlich ASCII-Zeichen verwendet werden sollten, also bspw. auch keine Umlaute in Identifiern.
Mir ging es bei der obigen Verwendung von ≤ hauptsächlich darum, eine möglichst große Ähnlichkeit zur Originalformel zu erreichen. Das war mir einen zusätzlichen Tastendruck (Strg-Taste vor dem <=) wert ;-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
