Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C (C89, C99 und C11) ::  .j     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Juli84
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.04.2011
Beiträge: 81
Beitrag Juli84 Mitglied 12:40:08 17.06.2012   Titel:   .j            Zitieren

.j


Zuletzt bearbeitet von Juli84 am 22:22:21 09.05.2013, insgesamt 1-mal bearbeitet
Schock
Unregistrierter




Beitrag Schock Unregistrierter 13:09:31 17.06.2012   Titel:              Zitieren

Du hast zwei Ausgaben, eine vor der Schleife (Ausgabe1), eine nach der Schleife (Ausgabe2).

1. Aufruf von foo, Ausgabe1 schreibt
m = 4, n = 1

2. Aufruf von foo, Ausgabe1 schreibt
m = 5, n = 3

3. Aufruf von foo, Ausgabe1 schreibt
m = 6, n = 5

4. Aufruf von foo, Ausgabe1 schreibt
m = 7, n = 7

5. Aufruf von foo findet nicht mehr statt, da Schleifenbedingung nicht erfüllt, n++ findet auch nicht statt, daher:

Ausgabe2 aus Aufruf 4 schreibt
m = 7, n = 7

Aufruf 4 kehrt zurück in Aufruf 3, n++ tut seinen Dienst

Ausgabe 2 aus Aufruf 3 gibt aus:
m = 6, n = 6

und so weiter...

Sollte ich mich irgendwo vertan haben, sollte der Grundgedanke doch aber rausgekommen sein.
gigg
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.03.2012
Beiträge: 175
Beitrag gigg Mitglied 13:09:41 17.06.2012   Titel:              Zitieren

Ich verstehe nicht, was dieser rekursive Aufruf von foo() soll?
Ist das ein rein experimentelles Programm, oder soll es eine bestimmte
Aufgabe leisten?
Juli84
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.04.2011
Beiträge: 81
Beitrag Juli84 Mitglied 13:16:58 17.06.2012   Titel:              Zitieren

.j


Zuletzt bearbeitet von Juli84 am 22:22:36 09.05.2013, insgesamt 1-mal bearbeitet
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 18005
Beitrag SeppJ Moderator 13:17:46 17.06.2012   Titel:              Zitieren

Das sind Ausgaben aus zwei Quellen:
1. Die Ausgaben in Zeile 11, wenn die rekursiven Funktionsaufrufe zurückkehren. Man beachte, dass wenn vorher m > n war, das n in der Schleife vergrößert wurde. Ein Beispiel für solch einen Aufruf ist die Zeile 6 (6,6) deiner Ausgabe, dies ist, was nach der Rückkehr von (7,7) durch die (6,5)-Funktion ausgegeben wird.
2. Beachte, dass die Schleife mehrmals durchlaufen wird. Bei der (5,3)-Funktion aus Ausgabezeile 3 werden sowohl (6,5) (Ausgabezeile 4 bis 7, inklusive Unterfunktionsaufrufe) als auch (6,6) gestartet (Ausgabezeile 8).

Um das genauer nachvollziehen zu können, könntest du mal das Programm in einem Debugger laufen lassen. Da kannst du genau nachvollziehen, wie viele Ebenen es gibt und welche Werte m und n in dem unterschiedlichen Ebenen haben.

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List
gigg
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.03.2012
Beiträge: 175
Beitrag gigg Mitglied 13:24:55 17.06.2012   Titel:              Zitieren

Die Ausgaben m und n entsprechen ja auch nicht den Werten der Variablen.

C++:
while(m > n)
  {
    foo(m + 1, n + 2); /* m und n werden hier ja nicht veraendert */
    n++;
  }
c++.de :: C (C89, C99 und C11) ::  .j   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.