Guten Morgen.
Eine kurze Verständnisfrage von einem C-Neuling an das Forum:
int test(int a, int b) {
if (a >= b)
return 1 + test(a-b, b);
else
return 0;
}
Welchen Wert liefert die Funktion für den folgenden Aufruf?
test(15, 4)
Ich komme auf 12,4 aber die richtige Antwort soll 3 sein.
Könnt Ihr mir kurz erklären, warum?
Gast
#6153313
Udo L. schrieb: > Ich komme auf 12,4 aber die richtige Antwort soll 3 sein. > Könnt Ihr mir kurz erklären, warum? Wenn Du mir erklärst wie Du auf 12,4 kommst, sag ich Dir, wie Du auf das richtige Ergebnis kommst...
Gast
#6153315
Udo L. schrieb: > Könnt Ihr mir kurz erklären, warum? Wenn man gerade keine Lust auf Nachdenken hat, probiert man das einfach in einem Debugger Schritt-Für-Schritt aus. Dann sieht man, was passiert. Das kann man bei der Gelegenheit gleich als Youtube Video veröffentlichen, dann ist man der Held (außer beim Lehrer).
Gast
#6153319
Eine Funktion, die sich selbst aufruft? So ein Mist ist das!
Beitrag #6153323 wurde von einem Moderator gelöscht.
Beitrag #6153329 wurde von einem Moderator gelöscht.
Gast
#6153332
Teddy schrieb: > Eine Funktion, die sich selbst aufruft? > So ein Mist ist das! Aber Lehrer stehen darauf, als ob man damit die meisten Probelme der IT lösen könnte.
Gast
#6153341
Stefan ⛄ F. schrieb: > Aber Lehrer stehen darauf, als ob man damit die meisten Probelme der IT > lösen könnte. Weil sie eben mehr Wissen als Schüler. Rekursion nenn sich das. Allerdings ist das Beispiel eine "schlechte" Rekursion. Sie ist nicht endrekursiv. Besser wäre:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Gast
#6153355
Teddy schrieb: > Eine Funktion, die sich selbst aufruft? > So ein Mist ist das! Wieso Mist? Rekursion, sich das nennt. Etwas Aufmerksamkeit, sie verdient! Gelernt werden, muss sie alle male, und sei es auch nur, um sie ausrollen zu können. frei nach Yoda
Gast
#6153369
Jetzt wird hier schon über Rekursion gelästert. Was kommt morgen? Lästern über das ohmsche Gesetz? Die natürlichen Zahlen? Den blauen Himmel?
Hab mal gehört: "Rekursiv geht meistens schief." Aber: Schön, wenn man's kann!
Vielen, vielen Dank für die schnelle Hilfe. Ja, Rekursionen sind wichtig und wollen gelernt sein, aber dieses Beispiel hätte ich auch anders programmiert. Meine Verständnisprobleme waren: 1. Dachte, die Rekursion wird nur einmal aufgerufen also dann (12,4) 2. Wie werden dann die Klammerwerte benutzt? (15,4) oder 15 -4 + 1 und 4 + 1 Ich muss mich im Rahmen des Studiums sowieso noch weiter mit C++ beschäftigen.
Gast
#6153397
Udo L. schrieb: > Ich muss mich im Rahmen des Studiums sowieso noch weiter mit C++ > beschäftigen. Ja. Zu dem Behufe könntest du dir ein schönes dickes C++ Buch anschaffen. Dort wird dir auch das mit den Klammern erklärt.
Gast
#6153399
Udo L. schrieb: > Wie werden dann die Klammerwerte benutzt? Hat Mutti im Beitrag Beitrag "C++ Programmcode" geschrieben.
Selbst wenn sie nur 1 Mal aufgerufen werden würde, wie kommt du auf 12? 15 - 4 sind bei mir 11. Und es kommt als Return auch nur 1 Zahl raus. Keine ,4 Es wird solange b von a abgezogen, solange a größer gleich b ist. Mutti hat es ja schon beschrieben
ok, danke erstmal
Udo L. schrieb: > Wie werden dann die Klammerwerte benutzt? Das sind zwei Werte durch , getrennt. Der erste Wert geht an a, der Zweite an b. Der Dezimaltrenner in C++ ist der Punkt.
Arduino Fanboy D. schrieb: > Zu dem Behufe könntest du dir ein schönes dickes C++ Buch anschaffen. > Dort wird dir auch das mit den Klammern erklärt. Buch und Lernhefte hab ich schon. Die nehme ich mir für das nächste Modul auch zur Hand. Brauchte nur ne schnelle kurze Erklärung, da ich das sowohl in BASCOM als auch VBA (Beide beherrsche ich gut) ganz anders gemacht hätte. Teddy schrieb: > Eine Funktion, die sich selbst aufruft? > So ein Mist ist das! Genau das hatte ich mir schon gedacht. Wurde wohl nur gemacht, um ein künstliches Beispiel in einer Online-Übung zu erschaffen Also vielen Dank nochmals.
Gast
#6153446
Udo L. schrieb: > Brauchte nur ne schnelle kurze Erklärung, da ich das sowohl in BASCOM > als auch VBA (Beide beherrsche ich gut) ganz anders gemacht hätte. Das hätte in den beiden Sprachen aber ziemlich genau so ebenfalls funktioniert.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.