stirlingsche zahlen rekursiv

newbee

Mitglied
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:
Code:
                                                           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
 
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* :rolleyes:
 
doch hat mr schon etwas weiter geholfen. aber es gibt wirklich stirlingsche zahlen sie sind wie follgt definiert.
Code:
{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:
Code:
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}
=
Code:
                               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?
 
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?
 
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
Code:
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?
 
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(n) / ( fakul(n-k) * fakul(k) );
}

das gesamte programm sieht so aus
Code:
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(n) / ( 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?
 
Zurück