Eine Fakultätentabelle von 1! bis n! wie mache ich das?



  • Was mir aufgefallen ist, das viele Menschen die iterativ progr., Probleme haben Rekursiv zu denken. Da sie immer den Programmablauf beschreiben wollen und net das Ergebnis.
    Ist schon lustig, seine schleifenbedingte Denkweise übern Haufen zu werfen.

    als für mich sind rekursive funktionen auch nix anderes wie schleifen :p 🙂



  • @RPD: ich weis nicht ob man diese loesung als rekursiv bezeichnen kann, aber hier sieht man das fuer jeden tabellen eintrag nur eine multiplikation notwending ist, wenn man jedesmal wieder eine rekursive funktion aufruft dann sind jedesmal wieder i multiplikationen und i funktionsaufrufe notwendig.

    orginal siehe erste seite

    const int n=4; 
    int fakultaet[n]; 
    fakultaeten[0] = 1; 
    
    for (int i=1; i<n; ++i) { 
       fakultaet[i] = fakultaet[i-1] * i; 
    }
    


  • Anonymous schrieb:

    Das was du beschrieben hast ist nicht häßlich. Häßlich wäre für mich was optisches, sozusagen das der Code bei einer Rekursion unlesbar wäre, oder in der Art. Aber das ist ja nicht der Fall. Rekursion ist eigentl. was schönes.

    schoen muss nicht immer etwas optisches sein, man kann auch algorythmen, die effizient sind, als schoen bezeichnen. und die rekursion ist nun mal nicht performant.



  • @Mirauder_Mo
    is schon klar. aber das is keine rekursive funktion ⚠



  • loesung als rekursiv

    Na klar ist sie rekursiv? Was denkst du, was Rekursion ist?

    Zw. rekursive Funktionen und Rekursion gibts noch einen kleinen Unterschied!
    Also ich kann nur sagen das ich am ANfang meine Probleme hatte , da ich alles mit Schleifen beschreiben wollte, aber mit der Zeit legt sich das.
    Es ist aber falsch Rekursion und Schleife gleich zusetzen.

    Rekursion -> Was ist das Ziel?
    Schleife -> Wie komme ich zum Ziel?

    Bsp. Parsergenerierung
    Wenn ich ne LL(1) Grammatik habe und einen Recursive Descent Parser definiere, sollte man wirklich nicht mehr iterativ denken, da das die Sache total verkompliziert.



  • /*
      Wenn's unbedingt rekursiv sein muß ;)
      aber normal würde man das nicht machen.
    */
    unsigned print_factorial_table(unsigned n) {
      if (n == 0) {
        return 1;
      } else {
        unsigned result = n * print_factorial_table(n-1);
        cout << result << endl;
        return result;
      }
    }
    


  • hab mich vertippt, siehe edit, lass mir doch drei minuten...bin ja auch grad beim arbeiten...

    btw.: für mich sind rekusionen schleifen! punkt und basta 😃



  • Bashar schrieb:

    /*
    aber normal würde man das nicht machen.
    */

    das hoff ich doch 😉



  • rpd: Schemer? 😉



  • ich? nein! 😃 erlaubt ist was gefällt... 😉



  • void fak_tabelle(unsigned int max_fak) {
      unsigned int f = 1;
      for (unsigned int i = 1;i<max_fak;++i) {
        f *= i;
        cout << f << endl;
      }
    }
    

    so gehts auch ohne array



  • Anonymous schrieb:

    so gehts auch ohne array

    Klar, aber war nicht explizit nach einer tabelle gefragt ?



  • Mirauder_Mo schrieb:

    Anonymous schrieb:

    so gehts auch ohne array

    Klar, aber war nicht explizit nach einer tabelle gefragt ?

    Naja, die Tabelle kann ja auch nur ausgegeben werden... wer verlangt denn ein Array?



  • Anonymous schrieb:

    Rekursive Funktionen find ich hässlich

    Was ist bitte daran hässlich?

    Warum 'ne rekursive Funktion ich würd für so 'ne kleine anweisung sowieso 'ne while Schleife nehmen.

    P.S. noobs würd ich auch keine rekursiven Funktionen empfehlen, aber sie können trotzdem manchmal sehr nützlich sein.



  • RPD: man sieht, dass du nicht verstehst. kuck dir mal den unterschied zwischen deiner und bashars loesung an.



  • jo, hab doch gesagt das ich nix verstanden hab...
    außerdem kannst du mir glauben das ich nicht auf bashars beitrag geantwortet hätte ohne ihn zu lesen 😃
    kuckst du hier:

    aber normal würde man das nicht machen.


Anmelden zum Antworten