Fakultät rekursiv berechnen
-
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 nlieberint 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 soif(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, aberb - 1mal (nicht 1 mal natürlich), herausfinden.Also ist das Folgeglied von
a + b, wennabspw. = 3 (eig. irrelevant) undb= 4:a + a + a + a = 4 * a = b * aAlso wird
b - 1 = 3mal+ x => + aangewandt: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).
-
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.
-
-
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.
-
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.
-
SeppJ schrieb:
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.Ok. Das ist natürlich umgerechnet ungefähr dasselbe wie meine Ausgabe.