Fakultät rekursiv berechnen



  • Stimmt und dann kommen die Fibonacci-Zahlen, obwohl die gerade ein Paradebeispiel dafür sind, wann man auf keinem Fall die Rekursion nehmen soll. 😉 😃



  • Achi schrieb:

    Ach verdammt, das hat mir 1 stunde nerven gekostet ...

    Vielen dank! 😉

    Und dann mach aus double n lieber int n , sonst kostet dich das früher oder später eine weiter Stunde Nerven.



  • Das solltest du einmal meinem Lehrer versuchen bezubringen! 😉

    Der Unterricht mit ihm is der Horror, man muss sich so gut wie alles selbst beibringen, aber was solls ...



  • Gugelmoser schrieb:

    Achi schrieb:

    Ach verdammt, das hat mir 1 stunde nerven gekostet ...

    Vielen dank! 😉

    Und dann mach aus double n lieber int n , sonst kostet dich das früher oder später eine weiter Stunde Nerven.

    Danke, aber warum?



  • Achi schrieb:

    Gugelmoser schrieb:

    Achi schrieb:

    Ach verdammt, das hat mir 1 stunde nerven gekostet ...

    Vielen dank! 😉

    Und dann mach aus double n lieber int n , sonst kostet dich das früher oder später eine weiter Stunde Nerven.

    Danke, aber warum?

    Naja, zum einen gibt es sowas wie "die Rekursion(bin heut etwas wirr) Fakultät aus Fließkommazahlen" nicht. Das geht nur mit natürlichen Zahlen (und macht auch nur da Sinn). Zum anderen ist das Rechnen mit Fließkommazahlen recht lustig (manchmal), also... 😃



  • Okay, da hast du recht! 😉
    Aber wie gesagt: bei unserem Lehrer lernt man halt nicht viel und deswegen muss man sich selbst alles aus dem internet zusammenkratzen! 😉

    Danke nochmal!



  • Achi schrieb:

    Gugelmoser schrieb:

    Achi schrieb:

    Ach verdammt, das hat mir 1 stunde nerven gekostet ...

    Vielen dank! 😉

    Und dann mach aus double n lieber int n , sonst kostet dich das früher oder später eine weiter Stunde Nerven.

    Danke, aber warum?

    -Fakultät ist doch nur für Natürliche Zahlen definiert.
    -Wenn ein float fest wäre, würde es nicht Fließkommazahl heißen.
    -Fließkommazahlen darfst du so if(n<=1) nicht vergleichen. Wenn du Fließkommazahlen miteinander vergleichen willst, greifst du zum Epsilon-Test.

    Epsilon-Test:

    double d = 2.0;
    double epsilon = 0.001;
    if( d>=(2.0f-epsilon) && d<=(2.0f+epsilon) )
    {
        cout << "equal";
    }
    


  • Achi schrieb:

    Ach verdammt, das hat mir 1 stunde nerven gekostet ...

    Nächstes Mal sinnvolle Namen, dann siehst du den Fehler auch viel eher. Spricht was gegen "fakultaet"?



  • Hacker schrieb:

    Das geht nur mit natürlichen Zahlen (und macht auch nur da Sinn).

    Schau dir mal die Gamma-Funktion an.

    Außerdem finde ich double, ohne den Anwendungszweck zu kennen, fast schon sinnvoller als int, denn bei letzterem ist bereits ab 13! Schluss.

    Edit: Bei 32-Bit-int.



  • Michael E. schrieb:

    Außerdem finde ich double, ohne den Anwendungszweck zu kennen, fast schon sinnvoller als int, denn bei letzterem ist bereits ab 13! Schluss.

    Dann nehm halt C++11 und unsigned long long 😃



  • cooky451 schrieb:

    Ich finde es irgendwie immer wieder lustig, dass Leuten Rekursion über die Fakultät näher gebracht wird. Dabei ist die doch gerade ein Paradebeispiel dafür, dass man Rekursion sehr sparsam einsetzen sollte.

    Es gibt ja quasi nur ein Beispiel einer einfachen Funktion(2^n), wo es sinnvoll ist Rekursion zu verwenden: 🙄

    #include <iostream>
    
    long exp2(int i){
            if(i==0)
                    return 1;
            return exp2(i-1)+exp2(i-1);
    }
    
    int main(){
            std::cout << exp2(4) << std::endl;
    }
    

    🤡



  • Rekursion sollte nur über die Ackermann-Funktion beigebracht werden. Bonuspunkte wer raus findet, was der Code macht.



  • pyhax schrieb:

    Michael E. schrieb:

    Außerdem finde ich double, ohne den Anwendungszweck zu kennen, fast schon sinnvoller als int, denn bei letzterem ist bereits ab 13! Schluss.

    Dann nehm halt C++11 und unsigned long long 😃

    👍
    Was ich auch faszinierend finde, aber zugleich bescheuert, ist folgendes Programm das einfach nur die größt-mögliche Zahl, die man in einem long double speichern kann, ausgibt. Das muss ich irgendwie falsch gemacht haben, auch wenn andererseits auf ideone (http://ideone.com/Na2AH) long double anscheinend 12 Bytes groß ist (wie bei mir). Und wie groß ist bitteschön 2 hoch 96 ? 😮

    @otze: Ich will, ich will! 🤡



  • @Otze: Ich glaube, ich habe es raus.

    ρ(a,b,0) = a + b
    ρ(a,b,1) = a * b
    ρ(a,b,2) = ab
    ...

    Das nächste Glied lässt sich durch das wiederholen der Operation des vorigen, angewandt auf a , aber b - 1 mal (nicht 1 mal natürlich), herausfinden.

    Also ist das Folgeglied von a + b , wenn a bspw. = 3 (eig. irrelevant) und b = 4:

    a + a + a + a
    = 4 * a
    = b * a
    

    Also wird b - 1 = 3 mal + x => + a angewandt: a +a +a +a



  • Michael E. schrieb:

    Außerdem finde ich double, ohne den Anwendungszweck zu kennen, fast schon sinnvoller als int, denn bei letzterem ist bereits ab 13! Schluss.

    Die Rückgabe (und die Zwischenergebnisse) sollten vom Typ double sein (da die Ergebnisse sehr groß werden), der Parameter aber vom Typ int (sofern man nicht die Gammafunktion implementiert).


  • Mod

    Hacker schrieb:

    Was ich auch faszinierend finde, aber zugleich bescheuert, ist folgendes Programm das einfach nur die größt-mögliche Zahl, die man in einem long double speichern kann, ausgibt. Das muss ich irgendwie falsch gemacht haben, auch wenn andererseits auf ideone (http://ideone.com/Na2AH) long double anscheinend 12 Bytes groß ist (wie bei mir). Und wie groß ist bitteschön 2 hoch 96 ? 😮

    Lern doch bitte endlich mal, was Fließkommazahlen sind. Dann verstehst du auch die Ausgabe. Und nein, das ist nicht 2^96, was du da bekommst.



  • SeppJ schrieb:

    Und nein, das ist nicht 2^96, was du da bekommst.

    Ist das 296?


  • Mod

    Hacker schrieb:

    SeppJ schrieb:

    Und nein, das ist nicht 2^96, was du da bekommst.

    Ist das 296?

    Ja? Hast du keinen Taschenrechner? Glaubst du einem Computer nicht?



  • SeppJ schrieb:

    Hacker schrieb:

    SeppJ schrieb:

    Und nein, das ist nicht 2^96, was du da bekommst.

    Ist das 296?

    Ja? Hast du keinen Taschenrechner?

    Doch, nur ist der so fies und gibt mir sowas:

    2^96 = 7.92281625 × 1028

    Glaubst du einem Computer nicht?

    Was!? Natürlich. Stell das nie in Frage.


  • Mod

    Hacker schrieb:

    Doch, nur ist der so fies und gibt mir sowas:

    2^96 = 7.92281625 × 1028

    🙄 Ich korrigiere: Bevor du lernst, was Fließkommazahlen sind und was dein Maximum zu bedeuten hat, lern erst einmal den Zahlenraum über 1000.


Anmelden zum Antworten