# stirlingsche zahlen rekursiv



## newbee (29. November 2003)

hallo ich will ein prgramm schreiben was mir die stirlingschen zahlen rekursiv ausgibt, bei eingabe von k und n. neben der methode main soll noch eine weitere methode vorhanden sein, die die stirlingsche zahl berechnet das ist ja kein problem.public class test2 {

    public static long stirling(int n, int k, int s){
        System.out.println("geben sie n ein");
        System.out.println("geben sie k ein");

         {            

    }

    public static void main (String [] args) {

        {
              for 
            System.out.println(i + ": " + s);
        }
    }
}
die methode stirling soll in der main aufgerufen werden um n
                                                                                                             k  für vom benutzer über oder eingegebene werte n,k  zu berechnen. hä? wie kann ich k über n berechnen und vorallem wie sag ich das dem programm? hat das was mit fakultäten zu tun, ich versteh ja nicht mal die aufgabenstellung. es heisst weiter, dass 0über 0=1, 0 über n=0, n über n=1 und k über n=k*(küber n-1)+(k-1 über n-1) jeweils für n>0 und 0<0<k<n. die ausgabe soll in einem dreieck angeordnet werden bsp:
	
	
	



```
1                                                      
                                                         0   1
                                                       0  1   1
                                                     0   1 3   1
                                                   0  1  7  6   1
                                                  0 1 15   25  10  1
```
denke mal da blickt keiner durch. wäre aber für ne hilfe sehr dankbar


----------



## NetPerformance (29. November 2003)

Huhu .. 

„stirlingsche zahl“ ist mir fremd ! 
Jedoch handelt es sich bei „n über k“ um den Binominalkoeffizient.
Für „n über k“ kannst du auch :  n! / (n-k)! * k! schreiben.
Mit dem Binom. kannst du k-elementiger Teilmengen einer n-elementigen Menge berechnen. 
Beispiel Lotto:
Wie viele 6 elementigen Teilmengen einer 49-elementigen Menge gibt es ? Antwort: 49! / (49-6)! * 49!
Diese Berechnung kann man im Pascal´schen Dreieck anordnen. 
Da mir „stirlingsche zahl“ fremd ist, kann es sein, dass ich vollkommen falsch liege !

Gruß
Aaron *der keine Ahnung hat, ob dir sein Beitrag überhaupt ein Hilfe war*


----------



## newbee (29. November 2003)

doch hat mr schon etwas weiter geholfen. aber es gibt wirklich stirlingsche zahlen sie sind wie follgt definiert.

```
{0}=1,   {n}=0,   {n}=1,  {n}= k*{n-1}+{n-1}
{0}         {0}         {n}       {k}        {  k  }  {k-1}
```
{} die kleinen geschweiften klammern müssetn einm große sein also das alles steht in der geschweiften klammer untereinander.
der user soll dann z.b. {0}
                                         {0} eingeben und als ausgabe kommt 1.
bsp:
	
	
	



```
eingabe:                                                                      
                               {0}                                                                               
                               {0}                                                                            
                          {1}      {1}                                                                  
                          {0}       {1}                                                              
                     {2}     {2}     {2}                                
                     {0}     {1}     {2}                                                         
                 {3}     {3}       {3}    {3}  
                 {0}     {1}       {2}     {3}           
           {4}      {4}      {4}      {4}      {4}
           {0}      {1}      {2}      {3}      {4}
     {5}       {5}      {5}     {5}      {5}       {5}
     {0}       {1}      {2}     {3}      {4}       {5}
=
```


```
1 
                            0    1
                          0   0   1
                        0  1    3   1
                    0    1   7    6    1
                0    1   15  25  10  1
```
(kann das nicht richtig formatieren aber du weisst sicher wie es gemeint ist)
wie kann ich dem programm sagen das es wenn 00 eingegeben wird 1 macht
wenn n0=1, wenn nn=1 usw.?
verstehst du das wie ich es meine?


----------



## newbee (29. November 2003)

ich habe mal deinen rat befolgt das ich für n über k  auch n! / (n-k)! * k! schreiben kann, aber das versteht mein java nicht. ! wird nicht als fakultät erkannt. gibt es dafür einen befehl bzw methode?


----------



## NetPerformance (29. November 2003)

Huhu 

Schau mal hier  nach.
Oder benutze google um weitere Informationen und Programme zu finden.

Gruß
Aaron


----------



## newbee (29. November 2003)

ich bin schon ein stück weiter.
also hab mir mal fix ein programm bzw ne methode gebastelt wo mit ich die fakultät berechne

```
class faku{
       
   public static int faku(final int n) {
      final int ergebnis = n == 0 ? 1 : n * faku(n - 1);
      return ergebnis; 
   } 

   public static void main(String[] args) { 
      System.out.println("Ergebnis: " + faku(Integer.parseInt(args[0])));
   } 
}
```
aber wie mache ich das allgemeiner das ich für n über k = n! / (n-k)! * k! mache
soll ich n eingeben lassen und dann  die gleichung ausrechnen lassen?


----------



## newbee (30. November 2003)

so habe jetzt noch eine methode geschrieben um n über k aus zurechnen.
public static int fakul(int x){ 
     int z = 1;
     int n, k;
     for (int i=z ; i <= x ; i++){ 
       z = z * i; 
       } 

     return z; 
        n = fakul / ( fakul(n-k) * fakul(k) );  
 } 

das gesamte programm sieht so aus

```
class faku{
       
   public static int faku(final int n) {
      final int ergebnis = n == 0 ? 1 : n * faku(n - 1);
      return ergebnis; 
   } 

   public static void main(String[] args) { 
      System.out.println("Ergebnis: " + faku(Integer.parseInt(args[0])));
      
   }
    public static int fakul(int x){ 
     int z = 1;
     int n, k;
     for (int i=z ; i <= x ; i++){ 
       z = z * i; 
       } 

     return z; 
        n = fakul(n) / ( fakul(n-k) * fakul(k) );  
 } 
 


    
         
}
```
aber der bringt mir den ollgenden compilerfehler:
faku.java [21:1] unreachable statement
        n = fakul / ( fakul(n-k) * fakul(k) );  
        ^
faku.java [22:1] missing return statement
 } 
 ^
2 errors
Errors compiling faku.
weiss jemand eine lösung auf mein problem?


----------

