Binomialkoeffizient rekursiv berechnen

khstgt

Mitglied
bin gerade dabei zu versuchen ein programm zu schreiben, welches den binomialkoeffizient für zwei übergebene zahlen berechnet.


Fehlermeldung:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
symbol: variable calculateBinomialCoefficient
location: class grundlagenuebungen.BinomialCoefficient

kann mirjemand sagen woran es liegt?

vielen Dank
 
Zuletzt bearbeitet:

mmeyer1987

Mitglied
Du hast die Klammern vergessen und die Parameter nicht übergeben. Probiers mal so:

Java:
package grundlagenuebungen;
 
import javax.swing.JOptionPane;
 
public class BinomialCoefficient {
 
    public static void main (String [] args){
 
  int n = Integer.parseInt (JOptionPane.showInputDialog ("Bitte geben Sie n ein: "));
  int k = Integer.parseInt (JOptionPane.showInputDialog ("Bitte geben sie k ein: "));
 
  JOptionPane.showMessageDialog (null, "Binomialkoeffizient " + calculateBinomialCoefficient(n,k));
 
    }
  public static int calculateBinomialCoefficient (int n, int k)
   {
      if (k == 1)
         return n;
      else if (n >= k && k == 0)
         return 1;
      else
         return (n * calculateBinomialCoefficient(n - 1, k - 1) / k);
 
   }
}

Wobei ich glaube, das das inhaltlich nicht stimmt. Wikipedia gibt folgenden Pseudocode:

Wikipedia hat gesagt.:
binomialkoeffizient(n, k)
1 wenn k = 0 dann rückgabe 1
2 wenn 2k > n
3 dann führe aus ergebnis \leftarrow binomialkoeffizient(n, n-k)
4 sonst führe aus ergebnis \leftarrow n
5 von i \leftarrow 2 bis k
6 führe aus ergebnis \leftarrow ergebnis \cdot (n + 1 - i)
7 ergebnis \leftarrow ergebnis : i
8 rückgabe ergebnis
Quelle: Wikipedia

Gruß!
 
Zuletzt bearbeitet:

bademaister

Mitglied
Hallo,
ich hab einmal eine Frage und zwar:
Java:
(n * calculateBinomialCoefficient(n - 1, k - 1) / k)
Was macht diese Zeile genau? Ich versteh das irgendwie nicht.
Ich hoffe da kann mir jmd helfen ???:L
 
S

SlaterB

Gast
ein Methodenaufruf mit irgendwelchen Parametern und der Rückgabewert int wird noch weitergerechnet,
was kann man denn daran prinzipiell nicht verstehen?

warum man das so macht und der Gesamtablauf von zig Aufrufen zum richtigen Ergebnis führt,
ist dagegen schon etwas schwieriger, dazu muss man Rekursion kennen und eine Vorstellung für den Gesamtalgorithmus haben
 

bademaister

Mitglied
Ja, das ist mir shcon klar. Nur wie kann der mit dieser Zeile 6 aus 49 ausrechnen?
/e
Also wie man prinzipiell den Binomialkoeffezienten ausrechnet ist mir schon klar.
Ich würde dies allerdings mit Fakultäten machen.
Andere Programme die ich hier im forum gesehen habe sind mit einer for schleife geschrieben wurden und sind deutlich länger.
Kannst du mir vllt den ersten schritt nennen wie der das hier ausrechnet?
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Mit der Zeile alleine nicht. Das ist ja ein rekursiver Aufruf, d.h. die methode würde (in deinem Beispiel) sich 5 mal selber aufrufen, bzw Allgemein gesagt, bis irgendwann einer der beiden vorherigen if-Abfragen zutreffen, weil dann wird ja nicht noch mal rekursiv, sondenr direkt n oder 1 zurückgegeben.

In dem Pseudocode von oben (der von Wiki) könnte man 6 aus 49 auch ohne Rekursion berechnen, was Performance-mäßig daher irgendwie schöner ist :D
 

bademaister

Mitglied
Rechnet er dann also folgendermaßen?
49*BC(48,5)/6.....->springe wieder hoch.
Im nächsten Schritt dann:
48*BC(47,4)/5....
47*BC(46,3)/4....
46*BC(45,2)/3....
45*BC(44,1)/2....
44*BC(43,2)/1....
und speichert die ergebnisse sodass zum schluss: (49/6)*(48/5)*(47/4)*(46/3)*(45/2)*(44/1) stehen bleibt?
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
was genau gerechnet wird, kannst du doch durch ein System.out.println() auf jeden einzelnen Schritt genau herausfinden,
evtl. temporär zusätzliche Variablen/ Parameter einfügen wie Runde/ Rekursionstiefe,
 

eRaaaa

Top Contributor
Rechnet er dann also folgendermaßen?
49*BC(48,5)/6.....->springe wieder hoch.
Im nächsten Schritt dann:
48*BC(47,4)/5....
47*BC(46,3)/4....
46*BC(45,2)/3....
45*BC(44,1)/2....
44*BC(43,2)/1....
und speichert die ergebnisse sodass zum schluss: (49/6)*(48/5)*(47/4)*(46/3)*(45/2)*(44/1) stehen bleibt?

Nein nicht ganz. Bei k==1 ist ja Schluß! Da wird ja dann in dem Beispiel direkt n also 44 zurückgegeben, so dass du dann folgenden Term eig. stehen hast:

49*(48*(47*(46*(45*44/2)/3)/4)/5)/6
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
sserio Binomialkoeffizient, wie findet man k und n heraus Java Basics - Anfänger-Themen 18
sserio Binomialkoeffizient n/k Java Basics - Anfänger-Themen 7
H Binomialkoeffizient Java Basics - Anfänger-Themen 6
J Binomialkoeffizient Java Basics - Anfänger-Themen 12
V Binomialkoeffizient-Produktformel Java Basics - Anfänger-Themen 8
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
M Fibonacci rekursiv mittels Cache Java Basics - Anfänger-Themen 17
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
Y Rekursiv Palindrom herausfinden Java Basics - Anfänger-Themen 5
B Fibonacci Zahlen rekursiv Array Java Basics - Anfänger-Themen 12
M String rekursiv Spiegeln mit Originalwort davor Java Basics - Anfänger-Themen 3
K Türme von Hanoi - Rekursiv. Java Basics - Anfänger-Themen 1
T MergeSort rekursiv programmieren Java Basics - Anfänger-Themen 8
M Zahlenpyramide rekursiv programmieren Java Basics - Anfänger-Themen 7
hello_autumn Potenz selber berechnen, Rekursiv. Java Basics - Anfänger-Themen 6
V Text wüerfeln-Rekursiv Java Basics - Anfänger-Themen 4
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
D Münzverteilung Möglichkeiten | Rekursiv Java Basics - Anfänger-Themen 3
R Hanoi rekursiv lösen Problem Java Basics - Anfänger-Themen 1
D Rekursiv Kombinationen ausgeben klappt nur bei einer Wiederholung Java Basics - Anfänger-Themen 4
shiroX OOP String rekursiv zurückgeben Java Basics - Anfänger-Themen 6
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
S java rekursiv iterativ hilfee :s Java Basics - Anfänger-Themen 5
E Erste Schritte Pi, rekursiv Java Basics - Anfänger-Themen 6
A Frage Methode ggt Rekursiv Java Basics - Anfänger-Themen 5
E Hanoi-Varianten rekursiv Java Basics - Anfänger-Themen 2
P Hanoi rekursiv zu iterativ umbauen Java Basics - Anfänger-Themen 20
P Mittelwert rekursiv Java Basics - Anfänger-Themen 13
E Integral Rekursiv Java Basics - Anfänger-Themen 15
M MergeSort rekursiv Java Basics - Anfänger-Themen 2
D Ziffer in Zahl Rekursiv Java Basics - Anfänger-Themen 4
B Array rekursiv untersuchen Java Basics - Anfänger-Themen 21
I Rekursiv Java Basics - Anfänger-Themen 13
C Rekursiv Zahlenfolgen berechnen mit zwei Variablen Java Basics - Anfänger-Themen 5
K Rekursiv zu Literal Java Basics - Anfänger-Themen 12
R Verzeichnisse rekursiv nach Dateiduplikaten durchsuchen Java Basics - Anfänger-Themen 5
L File Tree rekursiv Java Basics - Anfänger-Themen 10
X Addition rekursiv ohne Schleife Java Basics - Anfänger-Themen 10
M Sudoku Rekursiv lösen Java Basics - Anfänger-Themen 9
E Datentypen ein java problem rekursiv loesen Java Basics - Anfänger-Themen 2
K indexOf selbst rekursiv definieren Java Basics - Anfänger-Themen 4
M Fibonacci-Linear und Rekursiv Java Basics - Anfänger-Themen 14
J Java Rekursiv vs(zu) Iterativ Hilfe Java Basics - Anfänger-Themen 3
D preOrder, inOrder, postOrder rekursiv zusammensetzen aus String Java Basics - Anfänger-Themen 1
J eulersche rekursiv berechnen Java Basics - Anfänger-Themen 6
J Suchbaumeigenschaft rekursiv programmieren Java Basics - Anfänger-Themen 3
T Rekursiv Vokale zählen Java Basics - Anfänger-Themen 19
G Bestimmte Ebene eines Baumes rekursiv ausgeben Java Basics - Anfänger-Themen 49
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
G Sudoku rekursiv lösen Java Basics - Anfänger-Themen 10
S Stringlänge Rekursiv ermitteln Java Basics - Anfänger-Themen 2
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
0 a hoch b rekursiv - wie stoppen? Java Basics - Anfänger-Themen 3
T Ordnerstrucktur rekursiv auslesen Java Basics - Anfänger-Themen 9
G Rekursiv die größte Zahl eines Arrays Java Basics - Anfänger-Themen 6
G Rekursiv Array Elemente quadrieren Java Basics - Anfänger-Themen 2
N Fibo Zahlen:iterativ,rekursiv Anzahl der Additionen zählen Java Basics - Anfänger-Themen 2
P Permutationen einer Tour rekursiv Java Basics - Anfänger-Themen 4
G Baumstruktur rekursiv durchlaufen Java Basics - Anfänger-Themen 2
B Kürzesten Weg zwischen mehreren Punkten finden (rekursiv) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben