Binomialkoeffizient-Produktformel

valentina2013

Bekanntes Mitglied
Zuletzt bearbeitet:

Gucky

Top Contributor
Schreib dir eine Methode, die die Fakultät einer Zahl berechnet und baue anhand dieses Ansatzes deine Binomialkoeffizientsmethode.
 

stg

Top Contributor
Du kannst also z.B. einfach intern mit double rechnen und anschließend wieder auf long casten. Deine Methode sollte dazu wie folgt aussehen:

Java:
public static long productBinomial(int n, int k) {
		double f = 1;
		for (int j = k; j > 0; j--) {
			f *= (double) (n + 1 - j) / j;
		}
		return (long) f;
}

Abgesehen von evtl. Rundungsfehlern kommst du damit auf das gewünschte Ergebnis.
 

valentina2013

Bekanntes Mitglied
eine methode die Fakultät einer zahl berechnet habe ich,
Java:
public static long factorial(int n) {
		if ((n == 0) || (n == 1))
			return 1;
		else
			return n * factorial(n - 1);
	}
wusste aber nicht wie ich die für Produktformel einsetzen sollte.Ich dachte es soll mit einer Schleife funktionieren.
 

valentina2013

Bekanntes Mitglied
Rufe ich die in main auf:


Java:
public static long productBinomial(int n, int k) {
           double f = 1;
            
            for (int j = k; j > 0; j--) {
                f *= (double) (n + 1 - j) / j;
            }
            return (long) f;
    public static void main(String args[]) {
for (int n = 0; n < 22; n++) {
			for (int k = 0; k <= n; k++)
				System.out.print(productBinomial(n, k)+"\t");
			System.out.println();
bekomme ich nicht das was ich erwarte,kann das sein dass ich die fälle n==0 und n==k berücksichtigen muss?
 
Zuletzt bearbeitet:

valentina2013

Bekanntes Mitglied
Ausgabe soll dies hier sein:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1
1 20 190 1140 4845 15504 38760 77520 125970 167960 184756 167960 125970 77520 38760 15504 4845 1140 190 20 1
1 -1 -17 -110 -497 -1692 -4513 -9671 -16924 -24446 -29335 -29335 -24446 -16924 -9671 -4513 -1692 -497 -110 -17 -1 1
 

stg

Top Contributor
Das Problem sind wie in meinem vorherigen Beitrag angesprochen einfach nur Rundungsfehler!

schreibe statt
Code:
return (long) f;
besser
Code:
return Math.round(f);

Dann bekommst du die Ausgabe, die du haben willst. (Jedenfalls, wenn du die bei dir fehlenden schließenden Klammern noch hinzufügst...)
 

Ähnliche Java Themen

Neue Themen


Oben