Stack overflow! Warum?

Hallo zusammen,

ich möchte das Pascalsche Dreieck ausgeben und den Binomialkoeffizienten rekursiv berechnen. Code:

public class Bino {

 static int binomial(int n, int k) {
 if (k \> n)
 return 0;
 else if (n == k)
 return 1;
 else if (k == 1)
 return n;
 return binomial(n - 1, k - 1) + binomial(n - 1, k);
 }

 public static void main(String[] args) {
 for (int n=0; n

Es wird der StackOverflowError Error geworfen. Habe ich was falsch programmiert oder ist das einfach zu viel?

Danke, Juli

hallo

du hast ein rekursives programm. die tiefe der schachtelung hängt von den eingabewerten ab. am ende der schleife (n=9, k=9) bekommst du schon eine sehr hohe schachtelung zusammen.

der stack ist standardmässig mit 512 kb begrenzt. das reicht für die allermeisten anwendungen locker aus. in deinem fall ist es aber zuwenig. du kannst also entweder dein programm so optimieren, dass es nicht doppelt rekursiv arbeitet oder den stack vergrössern.

vergrössern geht z.b. so:

java -Xss1024k

damit wird der stack auf 1 mb gesetzt - also doppelt so gross wie der standard.

bei bedarf kannst du natürlich vergrössern - irgendwann hast du aber zuwenig hauptspeicher. bei aktuellen geräten mit mehr als 4 gb speicher und 64 bit os sollte das aber relativ lange dauern.

lg
erwin

Hey, danke für die Antwort!

Der Stack war nicht zu klein, ich habe eine Abbruchbedingung vergessen! Und zwar für den Fall, wenn k=0 ist.

Jetzt läuft alles problemlos!

Grüße, Julian