aber es funktioniert nicht, kann mir jemand behilflich sein?
"Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung!
Ein paar Anmerkungen zu deinem Code:
1) Du definierst eine Funktion (
fac) in einer Funktion (
main). Das ist falsch. Du musst die Funktion außerhalb von
main()
definieren.
2) Bitte formatiere doch den Code ordentlich. So versteht man ja gar nix.
3) Warum
i = i+1
und nicht einfach
i++
?
4) Du versuchst einen int
nk zu berechnen, indem du die ints
n und
k in deine Funktion
fac einsetzt. Aber n und k sind doch gar nicht definiert. Du musst deine Variablen initialisieren bevor du sie benutzen kannst!
5) Das Programm hat gar keine Ausgabe, also was bringt dir das alles?
Hier ist der Code etwas schöner formatiert:
C:
#include <stdio.h>
int fac(int n)
{
int fac_n = 1;
for(int i = 2; i <= n; i++)
fac_n = fac_n * i;
return fac_n;
}
int main()
{
int n;
int k;
// WAS SOLLEN n UND k SEIN?
int nk = fac( n ) / (fac( k ) * fac( n - k ));
return 0;
}
Noch eine Anmerkung zur Berechnung des Binomialkoeffizienten:
Du versuchst hier die Berechnung über die Fakultätsfunktion, was ja auch ziemlich genau der mathematischen Definition entspricht. Allerdings wächst die Fakultätsfunktion
sehr schnell an. Da Computer nur begrenzten Speicher haben - auch in den Registern - werden dir deine 64-Bit Integer schnell um die Ohren fliegen (Overflow). Die gute Nachricht ist, es gibt viele andere Berechnungsmethoden, die wesentlich stabiler sind. Ein Beispiel hierfür findest du sogar in der Wikipedia:
https://de.wikipedia.org/wiki/Binomialkoeffizient#Algorithmus_zur_effizienten_Berechnung
Ich würde an deiner Stelle zumindest mal auf deren Implementierung zurückgreifen. Unter Umständen willst du ja auch später noch auf BigInteger umsteigen, denn auch (n | k) steigt schnell auf verdammt große Zahlen an.
Gruß Technipion