Suche Hilfe: Rekursions (einfacher Code)
-
Hi und Hallo,
ich möchte zum Üben ein GUI-Programm schreiben, das mir, auf Knopfdruck, rekursiv Zahlen zwischen zwei Grenzen addiert.
Beispiel:
VON: 0 BIS: 100
ERGEBNIS: XXX
Habs mal versucht zu Programmieren, aber ich bekomme die Fehlermeldung das meine Variablen einen Wert haben der nie verändert wird.
Hier mein Code:
void __fastcall TfrmRekur::btnKlickClick(TObject *Sender) { int von = StrToInt(frmRekur->edtVon->Text); int bis = StrToInt(frmRekur->edtBis->Text); int ergebnis; int Rechnung(int bis) { if (bis == von) { return 1; } else return ergebnis = von + Rechnung(bis-1); } frmRekur->edtErg->Text = ergebnis; }Die Idee dainter ist, das das Programm solange sich selber aufruft und die obere Grenze um 1 verringert bis es bei "von" angekommen ist....und natürlich alles addiert.
Wo liegt mein Fehler und vll noch warum?

Würde mich über eure Hilfe sehr freuen.
MfG

-
hmm jo stimmt ja auch ... du übergibst den Wert ...
int calc(const int& to, const int& from) { if (to == from) return 1; return (from + calc(to - 1)); } void __fastcall TfrmRekur::btnKlickClick(TObject *Sender) { frmRekur->edtErg->Text = calc(StrToInt(frmRekur->edtBis->Text), StrToInt(frmRekur->edtVon->Text)); }? So oder wie willst de es haben? Hab den Sinn deiner Funktion nicht überprüft aber so sollte das gehen.
-
erstmal Danke für due schnelle Antwort.
In Zeile 5 kommt der Fehler das zu wenig parameter übergeben werden.
Hab sie testweise bischen abgeändertreturn (from + calc(to - 1));auf
return (from + calc(to - 1, from - 0));Dann gehts und es wird ja duch - 0 nichts verändert.
Das Programm lässt sich nun compilieren, aber bringt noch nicht den gewünschten Effekt.
Werde es mal weiter probieren.
Falls jemand die Lösung kennt, darf er sie gerne posten
P.S.
Ist es zwingend notwendig hier mit Referenzen zu arbeiten?
kann man nicht nur ads fertig Ergebnis zurück schicken? Dann wäre es ja wieder ein Wert und das kann eine Funktion ja verarbeiten!?
-
eaglestar schrieb:
[...]Ist es zwingend notwendig hier mit Referenzen zu arbeiten?
kann man nicht nur ads fertig Ergebnis zurück schicken? Dann wäre es ja wieder ein Wert und das kann eine Funktion ja verarbeiten!?Sehe ich auch so!
Die vielen Funktionsaufrufe bei Rekursionen sind unnötig bzw. sogar überflüssig.PS:
Ehe du eine Schleife programmierst, welche nur alle Zahlen addiert:
Gauß hat ein schönes Verfahren zum finden der Summe ( in dem fall die Partzialsumme ( sn ) der Zahlenfolge an=n ) zwischen 0 und einer bestimmten Zahl entwickelt:Zahl = n
Summe = (n + 1) * (n / 2)Beispiel:
Zahl = 100
Summe = 101 * 50 = 5050Hoffe ich konnte helfen!
-
Das man das vll mit einer andren Methode "schöner" Lösen kann, kann schon gut sein. Dabiete die mathematik ja unendlich viele Möglichkeinten.
Ich das Programm soll nur zum Über der Rekursion dienen.
Zur Funktionsweise was das Prog machen soll
Benutzer gibt ein..
ADDIERE
Von: 1
Bis: 3Button: Klick
Ergebnis: 6 //also 1+2+3 oder halt 3+2+1
-
int vonbis(int von, int bis) { assert(bis >= von); if(von == bis) { return von; } else { return bis + vonbis(von, bis - 1); } }