Faktoriell aufrufen



  • Oder exceptions...

    Endrekursion bietet sich hier aber auch eher an. Also den rekursiven Aufruf an das Ende der Funktion mit dem return verknüpfen. So sollte, wenn der Compiler das kann, der Stack wiederverwendet werden. Wobei ich aber gerade nicht weiß ob C++ das überhaupt kann. 😃



  • Ich finds immer wieder witzig wie hier einfachste Beispiele, die wie in diesem Fall nur einmal das Thema Rekursion einfach aufzeigen sollen an allen möglichen Ecken beanstandet werden

    (Mal abgesehen von dem Fehler beim Reinkopieren ist der Rest sinnlos.)
    Als nächstes kommt einer daher und will mit ein paar Funktionen sicherstellen dass das richtige Betriebssystem vorhanden ist, die Systemzeit stimmt und welche Compilerversionen vorhanden sind.

    Es ist anhand der Definition der Fakultät ersichtlich dass nur Argumente >=0 zugelassen sind, da braucht es keine Exceptions, Preconditions, Vorzeichen kicken oder sonstwas...
    Ist aber echt lustig - anstatt es direkt so zu programmieren wie es gehört wird lieber an allen Ecken und Enden gecastet, Exceptions geworfen oder sonstwas gemacht anstatt direkt sicherzustellen dass nichts anderes als die zugelassenen Parameter übergeben werden.

    Wer jetzt mit "aber man muss sicherstellen dass es keine Fehler gibt" ankommt:
    Das ist in dem Fall egal - wer es nicht bemerkt hat...ich hab in main auch Drei punkte reingebastelt, um den fehlenden Code zu symbolisieren...wenn man das aber direkt so einbindet wirft das einen Fehler... Oh nein...
    Die header hab ich auch vergessen...
    Ehrlich... 🙄



  • Kuldren schrieb:

    Mimimimi

    Habs für dich zusammengefasst.



  • Fellhuhn schrieb:

    Kuldren schrieb:

    Mimimimi

    Habs für dich zusammengefasst.

    Hat dir den Witz heute einer in der Volksschule erzählt und du musstest es gleich im Internet ausprobieren?



  • Kuldren schrieb:

    Fellhuhn schrieb:

    Kuldren schrieb:

    Mimimimi

    Habs für dich zusammengefasst.

    Hat dir den Witz heute einer in der Volksschule erzählt und du musstest es gleich im Internet ausprobieren?

    Da hatten wir nur Singen und Klatschen.



  • Fellhuhn schrieb:

    Kuldren schrieb:

    Fellhuhn schrieb:

    Kuldren schrieb:

    Mimimimi

    Habs für dich zusammengefasst.

    Hat dir den Witz heute einer in der Volksschule erzählt und du musstest es gleich im Internet ausprobieren?

    Da hatten wir nur Singen und Klatschen.

    Ist klar...die wollen ja Niemanden überfordern



  • Kuldren schrieb:

    Fellhuhn schrieb:

    Kuldren schrieb:

    Fellhuhn schrieb:

    Kuldren schrieb:

    Mimimimi

    Habs für dich zusammengefasst.

    Hat dir den Witz heute einer in der Volksschule erzählt und du musstest es gleich im Internet ausprobieren?

    Da hatten wir nur Singen und Klatschen.

    Ist klar...die wollen ja Niemanden überfordern

    Hatte ne 5.



  • @ Kuldren:
    Wieso regst du dich so darüber auf, dass dein Programm "kritisiert" wird? Erstens sind die anderen Argumente als das von Bashar (inklusive meinem) nicht als Vorwurf zu interpretieren. Ich habe es übrigens auch nicht ganz ernst gemeint, und Fellhuhn scheinst du auch noch nicht zu kennen. Andernfalls kann ich mir deine Reaktion wirklich nicht erklären...

    Und wenn du unsere Reaktionen sowieso schon vorhergesehen hast, wieso hast du dann überhaupt gepostet?

    Tim schrieb:

    da ein ordentlicher Compiler hier die Rekursion eh eliminieren wird.

    Werden Rekursionen vom Compiler auch optimiert? Es gibt ja einige Fälle, wo eine iterative Lösung gar nicht unbedingt besser und auch nicht einfacher zu realisieren ist.



  • Nexus schrieb:

    Tim schrieb:

    da ein ordentlicher Compiler hier die Rekursion eh eliminieren wird.

    Werden Rekursionen vom Compiler auch optimiert?

    In diesem Fall, bei einem nicht-total-schrottigen Compiler, bestimmt. Stichwort Tail recursion.



  • Nexus schrieb:

    @ Kuldren:
    Wieso regst du dich so darüber auf, dass dein Programm "kritisiert" wird? Erstens sind die anderen Argumente als das von Bashar (inklusive meinem) nicht als Vorwurf zu interpretieren. Ich habe es übrigens auch nicht ganz ernst gemeint, und Fellhuhn scheinst du auch noch nicht zu kennen. Andernfalls kann ich mir deine Reaktion wirklich nicht erklären...
    Fellhuhn kenn ich nicht...und ehrlich gesagt hab ich keinen Bock darauf mir die Foreninternen Witzbolde alle zu merken um dann zwischen ernstgemeinten und pseudowitzigen Kommentaren zu differenzieren. Ich hab lediglich gepostet um ein Beispiel zu bringen.

    Und wenn du unsere Reaktionen sowieso schon vorhergesehen hast, wieso hast du dann überhaupt gepostet?
    Damit der Threadersteller mal ein Beispiel zu Rekursion bekommt



  • /edit bullshit.



  • Tim schrieb:

    In diesem Fall, bei einem nicht-total-schrottigen Compiler, bestimmt. Stichwort Tail recursion.

    Welcher Compiler macht das denn, und wann? Die Scheme-Leute reißen sich ein Bein aus, die genauen Bedingungen zu formulieren, das ist in C++ bestimmt nicht gerade leichter. So ein Feature bringt einem ja nichts, wenn man sich nicht darauf verlassen kann.



  • Kuldren schrieb:

    Mit unsigned int einfach das Vorzeichen zu kicken würde zwar die Funktion zum Teil erfüllen aber dafür sicher einige Fehler zur Folge haben, denn 1. ist die Fakultät für negative Zahlen undefiniert und 2. hat es sicher einen Grund warum negative anstatt positive Argumente übergeben werden - was in den meisten Fällen sicher ein Fehler im Programm ist.

    Und auf solche möglichen Fehler wird der Programmierer genau durch eine Warnung aufmerksam gemacht wenn er einen int an einen unsigned int Parameter übergibt. Wenn die Funktion einen bestimmten Wertebereich hat und es einen Typen mit dem entsprechenden Wertebereich gibt, wieso sollte man dann einen anderen verwenden der dem Wertebereich nicht entspricht?

    Kuldren schrieb:

    Wofür gibts Conditions?

    Kuldren schrieb:

    [...]da braucht es keine Exceptions, Preconditions, [...]

    Hauptsache du bist dir mit dir selbst einig...

    Kuldren schrieb:

    Fellhuhn schrieb:

    Kuldren schrieb:

    Fellhuhn schrieb:

    Kuldren schrieb:

    ...

    ...

    ...

    ...

    ...

    http://www.tty1.net/smart-questions_de.html#keepcool diesen und den folgenden Absatz solltest du dir zu Herzen nehmen 😉



  • Bashar schrieb:

    Welcher Compiler macht das denn, und wann? Die Scheme-Leute reißen sich ein Bein aus, die genauen Bedingungen zu formulieren, das ist in C++ bestimmt nicht gerade leichter. So ein Feature bringt einem ja nichts, wenn man sich nicht darauf verlassen kann.

    Sich über das Vorhandensein oder nichtvorhandensein eines solchen Features den Kopf zu zerbrechen bevor der Profiler einem erklärt, dass die Rekursion tonnenweise Stack vernascht fällt mal wieder unter das Thema Premature Optimization
    Mal davon abgesehen dass weiter oben schon gesagt wurde, dass ab 13! die Kapazität eines int eh überschritten ist - und eine Rekursionstiefe von 13 ist ja nicht wirklich aufregend 😉



  • pumuckl schrieb:

    Und auf solche möglichen Fehler wird der Programmierer genau durch eine Warnung aufmerksam gemacht wenn er einen int an einen unsigned int Parameter übergibt. Wenn die Funktion einen bestimmten Wertebereich hat und es einen Typen mit dem entsprechenden Wertebereich gibt, wieso sollte man dann einen anderen verwenden der dem Wertebereich nicht entspricht?
    Du hast echt nicht verstanden worum es ging...Es ging nicht um die Machbarkeit sondern die Sinnhaftigkeit. Wozu sollte man negative Parameter übergeben wenn man ohenhin weiß dass diese für die Fakultät undefiniert sind?
    Hauptsache du bist dir mit dir selbst einig...
    Auch das hast du nicht verstanden...ich meinte dass es in diesem Fall keinerlei Conditions oder sonstwas bedarf weil es nur um die Rekursion an sich ging und nicht um die Umgebung der Funktion
    http://www.tty1.net/smart-questions_de.html#keepcool diesen und den folgenden Absatz solltest du dir zu Herzen nehmen 😉
    Den Link klick ich nicht mal an

    Nochmal damit es auch der letzte versteht:
    Hier ging es um das beispiel - insbesondere um die Rekursion und nicht darum alle möglichen Fehler abzufangen.



  • Bashar schrieb:

    Tim schrieb:

    In diesem Fall, bei einem nicht-total-schrottigen Compiler, bestimmt. Stichwort Tail recursion.

    Welcher Compiler macht das denn, und wann?

    Ich habe sicher keine Liste welcher Compiler was wann macht, ich habe auch nur für dieses Beispiel gesprochen. Sagen wir so: ein einigermassen aktueller gcc für eine nicht-seltsame Hardware (z.B. ohne "echten" Stack) sollte das optimieren. Ich sehe _hier_ nicht das Problem.

    Bashar schrieb:

    Die Scheme-Leute reißen sich ein Bein aus, die genauen Bedingungen zu formulieren, das ist in C++ bestimmt nicht gerade leichter.

    Das interessiert mich jetzt: Wo genau reißen die sich ein Bein aus?

    Bashar schrieb:

    So ein Feature bringt einem ja nichts, wenn man sich nicht darauf verlassen kann.

    Ich könnte frech sein und sagen, dass das dann für alle Optimierungsmaßnahmen gilt. Aber ich (glaube ich) weiss worauf du hinaus willst.



  • Kuldren schrieb:

    Hier ging es um das beispiel - insbesondere um die Rekursion und nicht darum alle möglichen Fehler abzufangen.

    Aha. Als Poster eines Beispiels™ verbietest du jegliche Kritik. Wie auch immer, trotzdem kein Grund, gleich so zu reagieren.



  • Kuldren schrieb:

    pumuckl schrieb:

    http://www.tty1.net/smart-questions_de.html#keepcool diesen und den folgenden Absatz solltest du dir zu Herzen nehmen 😉
    Den Link klick ich nicht mal an

    Du wirst es nicht glauben: es war tatsächlich als Hilfe gedacht und nicht als flame. Dass du dich gleich von allem und jedem persönlich angegriffen fühlst ist hier im Forum keine besonders hilfreiche Grundeinstellung und sorgt nicht unbedingt dafür dass du ernst genommen wirst (wie Fellhuhns Reaktion deutlich gezeigt haben dürfte).



  • Nexus schrieb:

    Kuldren schrieb:

    Hier ging es um das beispiel - insbesondere um die Rekursion und nicht darum alle möglichen Fehler abzufangen.

    Aha. Als Poster eines Beispiels™ verbietest du jegliche Kritik. Wie auch immer, trotzdem kein Grund, gleich so zu reagieren.

    Haha...klar...nach dem was da so steht ist das ein Grund so zu reagieren..

    pumuckl schrieb:

    Kuldren schrieb:

    pumuckl schrieb:

    http://www.tty1.net/smart-questions_de.html#keepcool diesen und den folgenden Absatz solltest du dir zu Herzen nehmen 😉
    Den Link klick ich nicht mal an

    Du wirst es nicht glauben: es war tatsächlich als Hilfe gedacht und nicht als flame. Dass du dich gleich von allem und jedem persönlich angegriffen fühlst ist hier im Forum keine besonders hilfreiche Grundeinstellung

    Mir ist egal als was es gedacht war - es hat sich so gelesen. Und die Grundeinstellungen hier im Forum sind mir ebenfalls herzlich egal. Ich wollte dem Threadersteller helfen und keine Seitenkommentare hören die ohnehin nichts mit dem Thema zu tun haben. Es ging um das Thema Rekursion bzw wie man die Aufgabe lösen kann und nicht darum irgendwelche Fehler abzufangen die ohnehin nicht auftreten werden. (Negative Zahlen) - Außerdem werden da sicher nur positive Zahlen übergeben.

    und sorgt nicht unbedingt dafür dass du ernst genommen wirst (wie Fellhuhns Reaktion deutlich gezeigt haben dürfte).

    Zum Einen...ja...ich finde es wirklich schlimm von Leuten deren Nicknames "Fellhuhn" und "Pumuckl" sind nicht ernst genommen zu werden - Und zum Anderen zeigt "Fellhuhn"s Reaktion nichts anderes als eine kindische Reaktion auf eine Erklärung.



  • pumuckl schrieb:

    Sich über das Vorhandensein oder nichtvorhandensein eines solchen Features den Kopf zu zerbrechen bevor der Profiler einem erklärt, dass die Rekursion tonnenweise Stack vernascht fällt mal wieder unter das Thema Premature Optimization

    Zu wissen ob der Speicherverbrauch linear in der Zahl der Iterationen oder konstant ist fällt nicht unter Optimierung.


Anmelden zum Antworten