<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Elementare Frage zur Rekursion]]></title><description><![CDATA[<p>Moin, moin!<br />
Ich habe das Prinzip der Rekursion verstanden, doch habe ich manchmal Schwierigkeiten zu verstehen, wie eine rekursive Funktion arbeitet. Ich habe mal als Beispiel eine kleine geschrieben:</p>
<pre><code class="language-cpp">void rec(int a)
{
	if (a==1) return;
	cout &lt;&lt; a &lt;&lt; &quot;  &quot; &lt;&lt; endl;
	rec(a-1);
	cout &lt;&lt; &quot;Dahinter&quot; &lt;&lt; &quot;   &quot; &lt;&lt; a &lt;&lt; endl;
}

int main()
{
	rec(5);
	return 0;
}
</code></pre>
<p>Nun versuche ich einfach mal die einzelnen Schritte nachzuvollziehen:</p>
<p>1.) Die Funktion wird aufgerufen, die Fallunterscheidung ist false, weshalb a ausgegeben wird, dann wird die Funktion wieder aufgerufen.</p>
<p>2.) Wenn die Funktion nun wieder aufgerufen wird, wird dann der Anweisungsblock hinter dem Selbstaufruf erstmal nicht ausgeführt (hier also die Ausgabe &quot;Dahinter&quot;)?</p>
<p>3.) Die Funktion ruft sich solange auf, bis a 1 ist. Doch wann kommt die Funktion denn hinter den Selbstaufruf? Der Anweisungsblock hinter dem Selbstaufruf wird erst dann ausgeführt, wenn a fünf mal ausgegeben wurde??? Wie kann ich mir das vorstellen? Wann wird was ausgeführt?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/255582/elementare-frage-zur-rekursion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 23:42:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/255582.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Dec 2009 15:30:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 15:30:40 GMT]]></title><description><![CDATA[<p>Moin, moin!<br />
Ich habe das Prinzip der Rekursion verstanden, doch habe ich manchmal Schwierigkeiten zu verstehen, wie eine rekursive Funktion arbeitet. Ich habe mal als Beispiel eine kleine geschrieben:</p>
<pre><code class="language-cpp">void rec(int a)
{
	if (a==1) return;
	cout &lt;&lt; a &lt;&lt; &quot;  &quot; &lt;&lt; endl;
	rec(a-1);
	cout &lt;&lt; &quot;Dahinter&quot; &lt;&lt; &quot;   &quot; &lt;&lt; a &lt;&lt; endl;
}

int main()
{
	rec(5);
	return 0;
}
</code></pre>
<p>Nun versuche ich einfach mal die einzelnen Schritte nachzuvollziehen:</p>
<p>1.) Die Funktion wird aufgerufen, die Fallunterscheidung ist false, weshalb a ausgegeben wird, dann wird die Funktion wieder aufgerufen.</p>
<p>2.) Wenn die Funktion nun wieder aufgerufen wird, wird dann der Anweisungsblock hinter dem Selbstaufruf erstmal nicht ausgeführt (hier also die Ausgabe &quot;Dahinter&quot;)?</p>
<p>3.) Die Funktion ruft sich solange auf, bis a 1 ist. Doch wann kommt die Funktion denn hinter den Selbstaufruf? Der Anweisungsblock hinter dem Selbstaufruf wird erst dann ausgeführt, wenn a fünf mal ausgegeben wurde??? Wie kann ich mir das vorstellen? Wann wird was ausgeführt?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816541</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 02 Dec 2009 15:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 15:39:19 GMT]]></title><description><![CDATA[<p>Ein rekursiver Funktionsaufruf ist trotzdem ein Funktionsaufruf und verhält sich nicht anders.<br />
Stell dir einfach vor, die Funktion würde nicht rec(a-1) sondern rec3(), rec2(), usw. aufrufen, dann ist doch klar, wann das nach dem (Selbst)-Aufruf dran kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816544</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 02 Dec 2009 15:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 15:39:49 GMT]]></title><description><![CDATA[<pre><code>main()
  rec(5)
    Ausgabe 5
    rec(4)
      Ausgabe 4
      rec(3)
        Ausgabe 3
        rec(2)
          Ausgabe 2
          rec(1)
            return
          Dahinter 2
          return 
        Dahinter 3
        return
      Dahinter 4
      return
    Dahinter 5
    return
  return 0
</code></pre>
<p>Du baust einen Callstack auf und wieder ab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816545</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 02 Dec 2009 15:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 15:43:43 GMT]]></title><description><![CDATA[<p>Bist du sicher, dass du das Prinzip der Rekursion verstanden hast? Wann sollte dahinter denn deiner Meinung nach angezeigt werden?</p>
<pre><code>rec-Aufruf mit a=5:
5 wird ausgegeben
rec wird mit 5-1 aufgerufen:
  rec-Aufruf mit a=4:
  4 wird ausgegeben
  rec wird mit 4-1 aufgerufen:
    rec-Aufruf mit a=3:
    3 wird ausgegeben
    rec wird mit 3-1 aufgerufen:
      rec-Aufruf mit a=2:
      2 wird ausgegeben
      rec wird mit 2-1 aufgerufen:
        rec-Aufruf mit a=1:
        Funktion kehrt zurück
      Dahinter 2 wird ausgegeben
      Funktion kehrt zurück
    Dahinter 3 wird ausgegeben
    Funktion kehrt zurück
  Dahinter 4 wird ausgegeben
  Funktion kehrt zurück
Dahinter 5 wird ausgegeben
Funktion kehrt zurück
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1816548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816548</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Wed, 02 Dec 2009 15:43:43 GMT</pubDate></item><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 15:45:42 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>1.) Die Funktion wird aufgerufen, die Fallunterscheidung ist false, weshalb a ausgegeben wird, dann wird die Funktion wieder aufgerufen.</p>
</blockquote>
<p>Richtig.</p>
<blockquote>
<p>2.) Wenn die Funktion nun wieder aufgerufen wird, wird dann der Anweisungsblock hinter dem Selbstaufruf erstmal nicht ausgeführt (hier also die Ausgabe &quot;Dahinter&quot;)?</p>
</blockquote>
<p>Genau. Ist aber auch nichts verwunderliches. Ist bei einem normalen Funktionsaufruf ja auch so, dass das, was dahinter steht, erstmal nicht ausgeführt wird (sondern erst, wenn der Funktionsaufruf beendet ist.)</p>
<blockquote>
<p>3.) Die Funktion ruft sich solange auf, bis a 1 ist. Doch wann kommt die Funktion denn hinter den Selbstaufruf?</p>
</blockquote>
<p>Dann wenn die Ausführung von rec(a-1) beendet ist.</p>
<blockquote>
<p>Der Anweisungsblock hinter dem Selbstaufruf wird erst dann ausgeführt, wenn a fünf mal ausgegeben wurde???</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Wie kann ich mir das vorstellen? Wann wird was ausgeführt?</p>
</blockquote>
<p>Dein Code hat (ausser der Ausgabe) keine Nebeneffekte, also kannst Du mal versuchen, die einzelnen Aufrufe in die main-Funktion einzusetzen. Vielleicht wird's dann klarer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816550</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Wed, 02 Dec 2009 15:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 15:50:18 GMT]]></title><description><![CDATA[<p>Hallo,<br />
vielen Dank für die raschen Antworten. Die beiden Grafiken von Nanyuki und Tobias Gerg waren der sehr hilfreich. Nanyuki schrieb, dass &quot; die Funktion zurückkehrt&quot;. Genau hier liegt die Frage. Wenn die Fallunterscheidung dann true ist, wird der Befehl return ausgeführt (quasi ein break in der Schleife). Das bedeutet, dass die Funktion unterbrochen wird. Dennoch wird dann erst der Rest ausgeführt, also 5 Mal &quot;Dahinter a&quot; ausgegeben. Wo speichert denn das Computer diese 5 mal. Hätte ich &quot;rec&quot; mit 6 aufgerufen, wann wäre 6 Mal &quot;Dahinter a&quot; ausgegeben.</p>
<p>Könnt ihr mir weiter helfen?</p>
<p>Vielen Dank euch allen<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816553</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 02 Dec 2009 15:50:18 GMT</pubDate></item><item><title><![CDATA[Reply to Elementare Frage zur Rekursion on Wed, 02 Dec 2009 16:35:30 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn die Fallunterscheidung dann true ist, wird der Befehl return ausgeführt (quasi ein break in der Schleife) ...</p>
</blockquote>
<p>Nein nicht unterbrochen, sondern beendet.</p>
<blockquote>
<p>Dennoch wird dann erst der Rest ausgeführt, also 5 Mal &quot;Dahinter a&quot; ausgegeben. Wo speichert denn das Computer diese 5 mal. Hätte ich &quot;rec&quot; mit 6 aufgerufen, wann wäre 6 Mal &quot;Dahinter a&quot; ausgegeben.</p>
<p>Könnt ihr mir weiter helfen?</p>
</blockquote>
<p>Das Zauberwort heißt <a href="http://en.wikipedia.org/wiki/Call_stack" rel="nofollow">Call stack</a>. Und in diesem Zusammenhang die Diskussion <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-254822.html" rel="nofollow">hier</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1816577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1816577</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Wed, 02 Dec 2009 16:35:30 GMT</pubDate></item></channel></rss>