myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Rekursion in C++ (mit einer Klasse) (https://mygully.com/showthread.php?t=2756443)

Shuyin 19.11.12 17:43

Rekursion in C++ (mit einer Klasse)
 
Hallo Leute

Ich würde gerne eine Rekursion in C++ realisieren aber weiß nicht, wie der Aufruf lautet.

Ich habe hier folgende Sachen:

Die Klasse "Fraction2" (ggT steht in private.. das hat schon seine Richtigkeit da ich noch eine Vererbung habe.. hab aber jetzt ein bissl umgeändert)

class Fraction2{
public:

private:
int ggT(int a, int b);
int minimize(void);
};


und ich würde gerne den größten gemeinsamen Teiler herausfinden und habe auf Wiki schon den Algorithmus herausgefunden.

soviel habe ich:

int Fraction2::ggT(int a, int b)
{
if(b==0)
return a;
else return Fraction2::ggT(int b, a % b);

}

nur meckert er bei meiner else abzweigung.

int (Error: Der Typname ist nicht zulässig)
b (Error: Zu wenig Argumente im Funktionsaufruf)

wie kann man denn jetzt Fraction2 nochmal aufrufen??

In C weiß ich wie es geht..


Danke für die Hilfe =)

slahn 19.11.12 18:10

Schau dir noch mal genau deinen Aufruf von ggT(int, int) im else-Zweig an ...

Bei if schreibst du ja auch nicht "if(int b == 0)" warum also bei ggT(int, int) ?

thunder_2011 19.11.12 18:53

Zitat:

Zitat von Shuyin (Beitrag 24037788)

class Fraction2{
public:

private:
int ggT(int a, int b);
int minimize(void);
};

int Fraction2::ggT(int a, int b)
{
if(b==0)
return a;
else return Fraction2::ggT(int b, a % b);

}

...

3 Fehler fallen mir sofort auf:

1.) else return Fraction2::ggT(int b, a % b);
Hier ist das "int" zuviel. Du willst doch den "b"-Wert übergeben und nicht definieren, was auch nicht geht beim Funktionsaufruf.

2.) else return Fraction2::ggT(int b, a % b);
Du ruft die Funktion "ggT" als statisch Funktion auf, obwohl sie nicht als static definiert wurde.

3.) In der Kassendefinition (Header-File) wurde keine PUBLIC-Methode angegen, sonden auschlüßlich PRIVATE-Funtionen, die von außen nicht aufrufbar sind.

Sollte dann in etwas so aussehen (Als Inline-Funktion):

class Fraction2{
public:
int ggT(int a, int b) {
if(b==0) {
return a;
}
else {
return ggT(b, a % b);
}
}
};

Test mit:

Fraction2 fr2;
int ggt=fr2.ggt(10,2);

Shuyin 20.11.12 04:46

jo hab mein fehler entdeckt ;-)

hab aber auch noch eine andere Methode gefunden..

int Fraction2::ggT(int a, int b)
{
int h;
while(b!=0)
{
h=a%b;
a=b;
b=h;
}


}

nur hatte es mich genervt, nicht zu wissen wie man eine Rekursion in c++ benutzt.

Danke leute =)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.