C++ Programmcode

OP #6153311
Lesenswert?
• ▲
▼
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 #6153315
Lesenswert?
• ▲
▼
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).
Beitrag #6153323 wurde von einem Moderator gelöscht.
Beitrag #6153329 wurde von einem Moderator gelöscht.
Gast #6153341
Lesenswert?
• ▲
▼
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
static int test_(int a, int b, int c) 
2
{
3
   if (a >= b)
4
      return test(a-b, b, c + 1);
5
   else
6
      return c;
7
}
8

9
int test(int a, int b) 
10
{
11
    return test_(a, b, 0);
12
}
OP #6153378
Lesenswert?
• ▲
▼
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.
OP #6153430
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.