Binomialkoeffizient



  • Hallo, ich habe folgendes Problem: Hausaufgabe ist, einen Algorithmus für den Binomialkoeffizienten zu implementieren. Ich habe versucht, das zu lösen, indem ich zunächst eine Fakultätsfunktion definiert habe, die ich dann aufrufen will, um mit einer einfachen Rechnung den Koeffizienten zu bekommen. Hier ist der Code:

    #include<stdio.h>
    #include <math.h>
    
    double fak(double n) {
    		double b;
    		double faku = 1;
    		for (b = 1; b<=n; b++) {
    		faku = faku * b;
    		}
    		return(faku);
    		}
    int main(void) {
    	double n,r,binom;
    	printf("Geben Sie n ein: \n");
    	scanf("%f",&n);
    	printf("Geben Sie r ein: \n");
    	scanf("%f",&r);
    	binom = fak(n)/(fak(r)*fak(n-r));
    	printf("%f\n",binom);
    	}
    

    Leider gibt mir das Programm als Lösung immer nur 1 aus, bzw. welche Zahl auch immer ich faku zuweise. Ich vermute, dass return aus irgendeinem Grund nicht die "upgedatete" Version von faku akzeptiert, aber komme nicht darauf, was ich machen muss, um dieses Problem zu beheben. Der Algorithmus für die Fakultät sollte richtig sein; wenn ich ihn in main stecke, und n festlege funktioniert er tadellos.



  • Auch Du solltest bei der return-"Funktion" unbedingt mehr Klammern machen. und %lf

    #include<stdio.h>
    #include <math.h>
    
    double fak(double n) {
            double b;
            double faku = 1;
            for (b = 1; b<=n; b++) {
            faku = faku * b;
            }
            return(((faku)));
            }
    int main(void) {
        double n,r,binom;
        printf("Geben Sie n ein: \n");
        scanf("%lf",&n);
        printf("Geben Sie r ein: \n");
        scanf("%lf",&r);
        binom = fak(n)/(fak(r)*fak(n-r));
        printf("%f\n",binom);
        }
    


  • Ich würde das Binom rekursiv berechnen,
    damit die Zahlen nicht so groß werden.

    So erhältst zu zu schnell einen Überlauf

    Gruß,

    Andreas


Anmelden zum Antworten