# Binominalkoeffizient Dynamisch



## farah (29. Jan 2022)

Hallo,
Ich hab ne Aufgabe über dynamische Programmierung von Binomialkoeffizienten.
Man muss zuerst ein Attribut “long[][] PascalTriangel” deklarieren, in dem das Zwischenergebnis am Index [n][k] gespeichert wird. Danach werden zwei Klassenkonstante UNBEKANNT= -1, und MAX_N =60 definiert.
Man soll im Konstruktor für die Tabelle passend Speicher reservieren, damit die Werte (n,k) für 0<= n<= MAX_N und 0<=k<= n ablegen kann.
Im Konstruktor soll die Tabelle mit UNBEKANNT bzw. mit 1 initialisiert werden, falls dies der Wert des Binominalkoeffizienten wäre. 
(Später soll in einer Methode Binominalkoeffizient
Nur dann (rekursiv) berechnet werden, wenn es vorher noch nie berechnet wurde (also Unknown in der Tabelle steht) oder außerhalb des gespeicherten Bereichs liegt. )
Ich hab den Konstruktor implementiert aber ich weiß nich wo das Ergebnis UNBEKANNT ist. 
Die zweite Frage ist soll ich anstatt While Schleife ne if-Bedingung schreiben?!

```
public static final int UNBEKANNT = -1;
    public static final int MAX_N = 60;
    private long[][] pascalTriangle;

    public Binomial(int k, int n) {
        pascalTriangle = new long[n][k];
        while (n <= 0 && n >= MAX_N && k >= 0 && k <= n) {
            for (int i = 0; i < pascalTriangle.length; i++) {
                pascalTriangle[i] = new long[i + 1];
                pascalTriangle[i][0] = 1;
                for (int j = 0; j <= pascalTriangle.length; j++) {
                    pascalTriangle[i][j] = (pascalTriangle[i - 1][j - 1]) +
                            (pascalTriangle[i - 1][j]);
                }
                pascalTriangle [i][i] = 1;
            }
        }
        
    }
```


----------



## mihe7 (30. Jan 2022)

Du sollst im Konstruktor noch nicht das Dreieck berechnen, sondern nur die Elemente des Array mit UNBEKANNT bzw. an den passenden Stellen mit 1 belegen.

Und richtig, für das Prüfen, ob die übergebenen Parameter den in der Vorbedingung formulierten Grenzen entsprechen, brauchst Du ein if und kein while. Im übrigen wird bei Verletzung der Vorbedingung normalerweise eine Ausnahme ausgelöst (z. B. eine IllegalArgumentException).


----------

