kirchi123 Geschrieben 9. Mai 2008 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
Klotzkopp Geschrieben 9. Mai 2008 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
kirchi123 Geschrieben 9. Mai 2008 Autor 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
TDM Geschrieben 9. Mai 2008 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
kirchi123 Geschrieben 9. Mai 2008 Autor 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
TDM Geschrieben 9. Mai 2008 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
Panke Geschrieben 15. Mai 2008 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
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.