kirchi123 Geschrieben 9. Mai 2008 Teilen Geschrieben 9. Mai 2008 Ich bin noch ein C++ Anfänger und habe ein Problem beim Thema Funktionen. Ich möchte ein Programm schreiben, dass den Array mit den Zahlen 5,7,4,3,9,10,1 einließt und in einer rekursiven Funktion, das Array durchläuft und nur die Zahlen ausgibt die kleiner als das bisherige Minimun, also z.b. min 5 nach der 1. Zahl, 7 wird nicht ausgegeben weil größer, dann wird 4 ausgegeben und das min wird auf 4 gesetzt, dann wird 3 ausgegeben und das min auf 3 gesetzt u.s.w. Das Durchlaufen des Arrays soll aber in rekursiver Funktion passieren ohne Schleife. Ich habe bisher folgenden Code, aber dieser gibt immer nur die Zahl 0 aus. Vielleicht könnte mir jemand helfen. #include <iostream> using namespace std; int arr[7]={5,7,4,3,9,10,1}; int min=30; int pos=0; int durch(int pos,int min) { if (pos>7) return pos=arr[pos]; if (pos<min) { cout << pos; min=pos; durch((++pos),min); } else if (pos>min) { durch((++pos),min); } else; } int main () { int min; durch(pos, min); system("PAUSE"); return 0; } Und vielleicht könntet ihr mir ein Paar Tipps geben, wo man im Internet das Kapitel Funktionen gut erklärt bekommt. Vielen Dank im Vorraus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Mai 2008 Teilen Geschrieben 9. Mai 2008 pos=arr[pos]; Das hier ist keine gute Idee. Danach steht in pos nicht mehr die Position, sondern der Wert an der Position. Die Position ist damit weg. Du brauchst aber die Position noch für die rekursiven Aufrufe. Benutz hier eine weitere Variable, oder verwende arr[pos]. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kirchi123 Geschrieben 9. Mai 2008 Autor Teilen Geschrieben 9. Mai 2008 Also du meinst ich soll noch eine Varaible z.b. a=arr[pos] verwenden, dann ++a um zu erhöhen bei jedem neuen Aufruf? Ja ich will dann den Wert des arrays an der position mit dem minimun von der vorhergehenden Position vergleichen. Wie könnte ich das machen? Vielen Dank schon im Vorraus. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 9. Mai 2008 Teilen Geschrieben 9. Mai 2008 erm, rekursive Funktion würd ich hier nicht nutzen, lieber Array iterieren und min immer neu setzen. btw: - Position 7 im Array ist ungültig. (vgl. if (pos>7) return; -> if (pos>=7) return;) - globale Variablen riechen schlecht. (wenn rekursiv dann array, pos und min immer mit übergeben) - globales min wird durch lokales min überdeckt. (... und dem lokalen min wird nach der Deklaration kein Werd zugewiesen.) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kirchi123 Geschrieben 9. Mai 2008 Autor Teilen Geschrieben 9. Mai 2008 Also du meinst Variablen nicht global sondern lokal definieren oder was? Und es wird immer nur die Zahl 0 ausgegeben. Wie kann man das durchlaufen des Arrays mit einer rekursion machen, geht das mit ++ oder ist das keine gute Idee? Danke schon im Vorraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 9. Mai 2008 Teilen Geschrieben 9. Mai 2008 Also du meinst Variablen nicht global sondern lokal definieren oder was? Ja. Und es wird immer nur die Zahl 0 ausgegeben. Logisch Erste mal in Funktion, pos = 0, min = irgendwas. pos = arr[0]; -> ergo 5 pos > min; -> pos > undefiniert (meistens irgendein minus) ++pos -> 6 pos = arr[6]; -> 1 pos > min; ++pos; 2 pos = arr[2]; -> 7 pos > min; ++pos; -> 8 8 > 7; -> return Wie kann man das durchlaufen des Arrays mit einer rekursion machen, geht das mit ++ oder ist das keine gute Idee? Danke schon im Vorraus Würd ich nicht machen. Eine rekursive Iteration ist auch nur eine schleifennachbildung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Panke Geschrieben 15. Mai 2008 Teilen Geschrieben 15. Mai 2008 (bearbeitet) void iterate(int array[], int length, int level=-1) { if(level==-1) { std::sort(array, array+length-1); iterate(array, length, 0) } else if(level==length) return; else { std::cout << array[level] << " \n"; iterate(array, length, ++level); } } [/PHP] Ich vermute mal das läuft so nicht. Aber die Idee sollte klar werden. Eventuell das Array vorher kopieren, falls es nicht sortiert werden soll. Und wenn es schon Codetags gibt, dann bitte auch benutzen. Das erleichtert die Sache doch immens. Edit: Code in eine Funktion gepackt Bearbeitet 15. Mai 2008 von Panke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.