Binomialkoeffizient

Heinrich500

Bekanntes Mitglied
Hallo, ich will ein Programm schreiben, dass den Binomialkoeffzient berechnet:
Java:
public class Binomialkoeffizient {
   
   
    public static int fakultaet( int n){
        if(n==1||n==0){
            return 1;
        }
        else{
        return n*fakultaet(n-1);
        }
    }
   
    public static void main(String [] args){
       
        int n=Integer.parseInt(args[0]);
        int k=Integer.parseInt(args[1]);
       
        int ausgabe= fakultaet(n)/(fakultaet(k) *fakultaet(n-k));
        System.out.println(ausgabe);
       
       
    }
   
  
}

Es funktioniert egtl. Wenn ich aber als Kommandozeilenparameter z.b 42, 42 übergebe, bekomme ich den Laufzeitfehler "Division durch 0". Ich sehe nicht woran das liegt?
 

ocsme

Top Contributor
Guten Tag,
das liegt daran das die Fakultät sehr schnell wächst.
Ab einem gewissen wert glaube bei 23 oder 24 ist es, funktioniert die Fakultät mit int nicht mehr. Und je größer das ganze wird also wie bei dir 42 kommt er irgendwann eben einmal auf 0. Dann ist die Fakultät 0 und du versucht durch 0 zu teilen. Da das Produkt später ja auch dadurch immer 0 ist.

Fak(34) = 0.
Fak(24) = -775946240
 

Heinrich500

Bekanntes Mitglied
Hallo,
danke für eine Antwort.Ich habe gar nicht an einen Überlauf gedacht. Wenn ich long nehme, geht es auch nicht. Wie könnte ich es alternativ machen?
 

ocsme

Top Contributor
Ja das ist gut:) Jedoch habe ich vergessen zu erwähnen, dass man die Fakultätsmethode benutzen muss.

Dann geht es nicht anders.
Das ein zigste das du tun kannst ist den Typ von int zu long zu ändern.
Denn ich vermute biginteger dürft ihr auch nicht nutzen:
https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

Dann mach es einfach so das die Eingabe nicht größer sein darf als 24 denn ab dann ist die Berechnung Fehlerhaft ;) so hab ich das auch gemacht :D
 

Ähnliche Java Themen

Neue Themen


Oben