| Autor |
Nachricht |
Juli84
Mitglied
Benutzerprofil
Anmeldungsdatum: 29.04.2011
Beiträge: 81
|
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
|
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
|
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
|
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
|
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
|
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++;
} | | |
|
|
|
 |
|
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.
|
|
|
|
|