• 09.07.2025, 01:30
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

hurra

God

C: Rekursive Funktion

Freitag, 2. April 2004, 15:38

hallo zusammen, ich kriege folgende rekursive Funktion einfach ned hin:

Quellcode

1
2
3
4
5
6
7
8
9
10
for(i=0;i<6;i++)
            {
                  for(j=0;j<6;j++)
                  {
                        for(k=0;k<6;k++)
                        {
                                    if((omega[i]+omega[j]+omega[k])==augensumme)co++;                              
                        
                        }
                  }


Ich bräuchte halt n-for-schleifen, die dann immer omega[n1]+omega[n2]... bilden.

Geht sowas überhaupt, oder sollte ich noch mehr überlegen?

Cu Hurra

TheJoker

God

Re: C: Rekursive Funktion

Freitag, 2. April 2004, 15:45

hi

öhm ich versteh das problem noch nicht ganz... also welche formel genau willst du realisieren?

Rekursiv seh ich da bisher nix, rekursiv heißt, eine funktion in ihr selbst nochmals aufzurufen.
C programmers never die. They are just cast into void. Neues moddingtech.de Portal online!

hurra

God

Re: C: Rekursive Funktion

Freitag, 2. April 2004, 16:07

Ja:

Ich brauch n-for-schleifen, die immer ineinandergeschachtelt werden,

Eumel

God

Re: C: Rekursive Funktion

Freitag, 2. April 2004, 18:19

Quellcode

1
2
3
4
5
6
7
8
9
10
void func(int n)
{
   if (n > 1)
      func(n - 1);
   else
   {
      for (int i = 0; i < 6; i++)
         ;
   }
};


Meinst du das so? Ich würde sagen, dein Problem lässt sich nicht rekursiv lösen, da du auf Datenelemente zurückgreifen willst (i, j, k) die in bereits aufgerufenen Funktionen bestehen.

MfG

Edit: Kannst du mal allgemein sagen, was du machen willst?
"I've always said, the Web is the sum of all human knowledge plus porn.", Ron Gilbert
UltraStar Manager 1.7.2 | Infos zu meinem PC | .o0 DeathSpank 0o.

god0815

Senior Member

Re: C: Rekursive Funktion

Samstag, 3. April 2004, 13:37

Zitat von »hurra«

hallo zusammen, ich kriege folgende rekursive Funktion einfach ned hin:

Quellcode

1
2
3
4
5
6
7
8
9
10
for(i=0;i<6;i++)
            {
                  for(j=0;j<6;j++)
                  {
                        for(k=0;k<6;k++)
                        {
                                    if((omega[i]+omega[j]+omega[k])==augensumme)co++;                              
                        
                        }
                  }


Ich bräuchte halt n-for-schleifen, die dann immer omega[n1]+omega[n2]... bilden.

Geht sowas überhaupt, oder sollte ich noch mehr überlegen?

Cu Hurra


Probier doch mal:

void func(int augensumme, int zwischensumme,int threshold)
{
if (threshold>0) {
for (int i=0;i<6;i++) {
func(augensumme, zwischensumme+i, threshold-1);
}
}
else {
if (zwischensumme==augensumme) co++;
}
}

void main {
func(augensumme, 0, 3);
}

Bin nur E-Techniker und hab noch nie c programmiert, hoffe es funktioniert ;)

Gruß
god0815

MDKeil

Senior Member

Re: C: Rekursive Funktion

Samstag, 3. April 2004, 16:41

In Deiner Funktion sehe ich ebenfalls keine Rekursion.. Schildere uns lieber Deine Problemstellung dann können wir Dir besser helfen.

MDKeil

god0815

Senior Member

Re: C: Rekursive Funktion

Samstag, 3. April 2004, 19:37

Zitat von »MDKeil«

In Deiner Funktion sehe ich ebenfalls keine Rekursion..


Hmmm?
Wenn Du meinen Lösungsvorschlag meinst:
Die Funktion func ruft sich selbst immer wieder auf. Siehe Zeile 5. DAS ist dann doch das Wesen der Rekursion, oder hab ich was verpasst?

Gruß
god0815

MDKeil

Senior Member

Re: C: Rekursive Funktion

Samstag, 3. April 2004, 22:35

Zitat von »god0815«



Hmmm?
Wenn Du meinen Lösungsvorschlag meinst:
Die Funktion func ruft sich selbst immer wieder auf. Siehe Zeile 5. DAS ist dann doch das Wesen der Rekursion, oder hab ich was verpasst?

Gruß
god0815


Dein Funktion meinte ich auch micht, dies ist wohl rekursiv..ich meinte die von hurra.. hab mich wohl ein wenig unglücklich ausgedrückt..

MDKeil

hurra

God

Re: C: Rekursive Funktion

Samstag, 3. April 2004, 22:39

Hallo zusammen

Dass meine Funktion nicht rekursv ist weiß ich auch, aber für die Problemlösung brauch ich wohl ne rekursive (deswegen auch der Threadtitel)

Also, da wir in Mathe halt so Aufgaben über die Ferien aufbekommen haben, und die auch schön zu programmiern sind, hab ich des halt mal gemacht. (wahrscheinlichkeit bei 3,4,5 x Würfel, dass alle Möglichen Augensumme entstehen)
Da ich des jetzt aber allgemein (für n-mal-Würflen programmiern wollte), brauch ich nen anderen Code.
Ich brauche für jeden Würfelwurf eine for-Schleife und ein omega[n] mehr.

Die vorhanden Vorschläge probier ich gleich mal aus.
DAnke

Cu Hurra

god0815

Senior Member

Re: C: Rekursive Funktion

Sonntag, 4. April 2004, 13:10

@MDKeil: Sorry, Missverständnis ;)

@Topic:
Naja, wenn Du wirklich die Würfelsummen brauchst solltest Du zwei Dinge tun:
erstens sollten die for-Schleifen so aussehen:
for (int i=1;i<=6;i++)

zweitens: Du solltest die Wahrscheinlichkeiten für die Augensummen in einer Hashtable speichern damit Du nicht für jede mögliche Augensumme einen kompletten neuen Programmlauf machen musst!
Dann kannst Du in der 'else'-Schleife meines Codes statt co++ halt jeweils den Hashtable-Eintrag für die entsprechende Würfelsumme eins hochsetzen.
Wenn's in c keine Hashtables gibt (???) dann kannst Du das auch mit nem Array erledigen ;)

Gruß
god0815

hurra

God

Re: C: Rekursive Funktion

Mittwoch, 14. April 2004, 23:12

So

Da die Ferien bald zu ende gehn, hab ich natürlich auch an meine Mathehausaufgabe gedacht. Ich habe selbst noch einmal überlegt und rumprobiert, hab die Funktion aber leider nicht hinbekommen.

Jetzt hab ich die Funktion von god0815 gnommen, noch die for-schleife geändert, und es geht. Aber Rechenpower wird benötigt.

Könnte ich die Funktion noch irgendwie optimieren? Ich glaube nicht.

Danke an alle

CU Hurra

Eumel

God

Re: C: Rekursive Funktion

Donnerstag, 15. April 2004, 12:32

Zitat

Die Wahrscheinlichkeit, dass alle möglichen Augensummen von 3, 4, 5 ... Würfeln entstehen...


Hmmm...

Also, wenn du einen Würfel hast, ist die Wahrscheinlichkeit 1:6 oder? Bei zwei Würfeln wäre das 1:36. Bei n Würfeln wäre dass 1 : 6n

Oder meinst du was anderes?

MfG
"I've always said, the Web is the sum of all human knowledge plus porn.", Ron Gilbert
UltraStar Manager 1.7.2 | Infos zu meinem PC | .o0 DeathSpank 0o.

hurra

God

Re: C: Rekursive Funktion

Freitag, 16. April 2004, 23:16

No, schon richtig, nur ich meine was anderes.

zB Wie hoch ist die Wahrscheinlichkeit, dass ich bei 3x hintereinander würfeln die Augensumme (Alle Augen die gewürfelt wurden zusammenzählen) 10 hab.

Lösung: 27/216 ;D

Hab jetzt mal alle bis zu 12x Würfeln ausgerechnet:
Klick

Cu Hurra

god0815

Senior Member

Re: C: Rekursive Funktion

Samstag, 17. April 2004, 15:17

Das Abspeichern von Zwischenergebnissen spart dir die wiederholte Berechnung bereits erkannter Zahlen.

Wie genau Du das machen musst findest Du bestimmt raus :)

Ansonsten kann man die Wahrscheinlichkeiten natürlich auch direkt berechnen :)

hurra

God

Re: C: Rekursive Funktion

Samstag, 17. April 2004, 15:27

Hi

Zwischenergebnisse brauch ich ned, ich kann direkt die Anzahl der Würfelungen eingeben.

Dass es da ne direkte Formel gibt hab ich mit schon gedacht, naja, werde ich siocher bald kennenlernen.

Cu Hurra

god0815

Senior Member

Re: C: Rekursive Funktion

Sonntag, 18. April 2004, 09:13

Zitat von »hurra«

Hi

Zwischenergebnisse brauch ich ned, ich kann direkt die Anzahl der Würfelungen eingeben.




Jo, aber wenn Du die Zwischenergebnisse für 11 Würfel abgespeichert hast kannst Du daraus ganz einfach die Ergebnisse für 12 mal würfeln ableiten OHNE alles nochmal zu berechnen :)

Außerdem kannst Du in einem einzigen Durchlauf die Wahrscheinlichkeiten für ALLE Würfelsummen berechnen, nicht für jede Summe ein eigener Durchlauf...

Gruß
god0815