<?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[Rekursive Funktion (Verständnisproblem)]]></title><description><![CDATA[<p>Hallo alle zusammen!</p>
<p>Ich habe es mir jetzt ungefähr 1000 bis 2500mal angeschaut und vberstehe es trotzdem nicht!</p>
<pre><code>long blabla (long n)
{
if (n != 0)
{
return n * blabla(n-1);
}
return 1;
}
</code></pre>
<p>Die Funktion dient zum berechnen einer beliebigen Fakultät.<br />
Nehemen wir an ich will 4! berechnen lassen, also 1*2*3*4:<br />
Ich übergebe also nun den Wert 4.<br />
Das ganze wird logischerweise in umgekehrter Reihenfolge abgearbeitet.<br />
Was aber passiert, wenn n 0 ist?<br />
Wenn ich das richtig sehe, steht irgendwo in meinem Programm sowas wie:</p>
<pre><code>FakVier = blabla (4);
</code></pre>
<p>Wenn nun aber n 0 ist, wird der code nach der Bedingung fortgesetzt, wo offensichtlich &quot;return 1;&quot; steht.<br />
Warum wird FakVier 24 und nicht 1?!</p>
<p>Klärt mich auf! Es ist der Stack, meine ich...was mir aber nicht hilft den Ablauf zu begreifen!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/253129/rekursive-funktion-verständnisproblem</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 01:07:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253129.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Oct 2009 22:04:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:04:43 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen!</p>
<p>Ich habe es mir jetzt ungefähr 1000 bis 2500mal angeschaut und vberstehe es trotzdem nicht!</p>
<pre><code>long blabla (long n)
{
if (n != 0)
{
return n * blabla(n-1);
}
return 1;
}
</code></pre>
<p>Die Funktion dient zum berechnen einer beliebigen Fakultät.<br />
Nehemen wir an ich will 4! berechnen lassen, also 1*2*3*4:<br />
Ich übergebe also nun den Wert 4.<br />
Das ganze wird logischerweise in umgekehrter Reihenfolge abgearbeitet.<br />
Was aber passiert, wenn n 0 ist?<br />
Wenn ich das richtig sehe, steht irgendwo in meinem Programm sowas wie:</p>
<pre><code>FakVier = blabla (4);
</code></pre>
<p>Wenn nun aber n 0 ist, wird der code nach der Bedingung fortgesetzt, wo offensichtlich &quot;return 1;&quot; steht.<br />
Warum wird FakVier 24 und nicht 1?!</p>
<p>Klärt mich auf! Es ist der Stack, meine ich...was mir aber nicht hilft den Ablauf zu begreifen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799984</guid><dc:creator><![CDATA[kARRE]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:04:43 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:13:24 GMT]]></title><description><![CDATA[<p>Im ersten Schritt wird ja n*blabla(n-1) zurueck gegeben. Das heisst aber, dass diese Funktion wiederum sich selber aufruft. Das macht sie, wie in Deinem Beispiel, von 4 abwaerts. Hier laeuft die Funktion entsprechend solange durch, bis irgendwann mal die Funktion mit &quot;n-1=0&quot; aufgerufen wird. In diesem Fall gibt die Funktion nur eine 1 zurueck und die Funktion an sich wird nicht mehr aufgerufen. Ist dieses der Fall, so wird die Rekursion quasi zurueck gerollt. Genau dann ist naemlich die Berechnung 1*2*3*4... und zu guter Letzt erhaeltst Du Deine Fakultaet. Zumindest ist das meine Vorstellung einer Rekursion. Fuer Kritik waere auch ich natuerlich dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799986</guid><dc:creator><![CDATA[Edward316]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:25:43 GMT]]></title><description><![CDATA[<p>okay, aber was ist mit return 1; denn wenn FakVier 24 wird wohin geht dann die 1? Ich mein irgendwas muss doch damit passieren, oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799990</guid><dc:creator><![CDATA[kARRE]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:29:00 GMT]]></title><description><![CDATA[<p>Erklärt ist es ja schon. Aber hier sieht man auch wie gefährlich rekursive Funktionen sein können. Teste mal mit n = 100.000, dann schmiert nämlich deine Applikation wegen stackoverflow ab. Hier lieber das problem mit einer schleife lösen.</p>
<p>EDIT: return 1 ist dein letztes *1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799992</guid><dc:creator><![CDATA[schmuessla]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:29:00 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:30:21 GMT]]></title><description><![CDATA[<p>wandert quasi wieder zurueck. Stell Dir das als Schachtel vor:</p>
<p>Du packst solange die anderen Schachteln aus, bis Du bei der Kleinsten angekommen bist, so dass Deine Funktion nur die 1 zurueck gibt. Dann gehst Du wieder in die vorherige Schachtel, wo dann die 1 mit der 2 multipliziert wird. Danach gehst Du in die naechste Schachtel, wo Deine 2 mit einer 3 multipliziert wird usw. Ersetz zum Beispiel mal die 1 mit einer 10. Dann erhaeltst Du das 10-fache der eigentlichen Fakultaet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799993</guid><dc:creator><![CDATA[Edward316]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:33:51 GMT]]></title><description><![CDATA[<p>kARRE schrieb:</p>
<blockquote>
<pre><code>long blabla (long n)
{
if (n != 0)
{
return n * blabla(n-1);
}
return 1;
}
</code></pre>
</blockquote>
<p>Wenn du aufrufst:</p>
<pre><code class="language-cpp">blabla(4);
</code></pre>
<p>führt dich das zur Anweisung</p>
<pre><code class="language-cpp">// return n * blabla(n-1), mit n = 4
return 4 * blabla(3);
</code></pre>
<p>Bevor der Wert zurückgegeben werden kann, muss jetzt aber blabla(3) ausgewertet werden, was dann zu</p>
<pre><code class="language-cpp">// blabla(3)
return 3 * blabla(2);
</code></pre>
<p>führt.<br />
Bevor jetzt blabla(3) den Wert an blabla(4) zurückgeben kann, muss erst blabla(2) ausgewertet werden, was</p>
<pre><code class="language-cpp">return 2 * blabla(1);
</code></pre>
<p>ergibt, was wiederum zu</p>
<pre><code class="language-cpp">return 1 * blabla(0);
</code></pre>
<p>führt.<br />
Mit blabla(0) ist deine Rekursion beendet (denn blabla(0) ruft sich schließlich nicht mehr selbst auf, sondern gibt einfach 1 zurück).<br />
Die Ergebnisse werden (rückwärts) an die jeweils aufrufende Funktion zurückgeliefert:</p>
<pre><code class="language-cpp">// blabla(1)
return 1 * 1;
</code></pre>
<p>an</p>
<pre><code class="language-cpp">// blabla(2)
// return 2 * blabla(1);
return 2 * 1;
</code></pre>
<p>an</p>
<pre><code class="language-cpp">// blabla(3)
// return 3 * blabla(2);
return 3 * 2;
</code></pre>
<p>an</p>
<pre><code class="language-cpp">//blabla(4)
// return 4 * blabla(3);
return 4 * 6
</code></pre>
<p>Fertig.<br />
lg<br />
Sinthoras</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799994</guid><dc:creator><![CDATA[Sinthoras]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:33:51 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Wed, 28 Oct 2009 22:55:29 GMT]]></title><description><![CDATA[<p>Achso Ich könnte in diesem Fall also auch</p>
<pre><code>if(n &lt; 1)
</code></pre>
<p>anstelle von</p>
<pre><code>if (n != 0)
</code></pre>
<p>benutzen, ohne das sich am Ergebnis was ändert.</p>
<p>Danke!</p>
<p>Jetzt hab ichs geschnallt! Das is in meinem Buch sowas von unzureichend erläutert...</p>
<p>Ich komm nich drauf klar, dass so viele und vor allem so schnell gepostet haben.</p>
<p>Nochmal Danke Leute!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1799998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1799998</guid><dc:creator><![CDATA[kARRE]]></dc:creator><pubDate>Wed, 28 Oct 2009 22:55:29 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion (Verständnisproblem) on Thu, 29 Oct 2009 06:46:13 GMT]]></title><description><![CDATA[<p>kARRE schrieb:</p>
<blockquote>
<p>Achso Ich könnte in diesem Fall also auch</p>
<pre><code>if(n &lt; 1)
</code></pre>
<p>anstelle von</p>
<pre><code>if (n != 0)
</code></pre>
<p>benutzen, ohne das sich am Ergebnis was ändert.</p>
</blockquote>
<p>Wenn du das '&lt;' in ein '&gt;' änderst passts fast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1800031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1800031</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 29 Oct 2009 06:46:13 GMT</pubDate></item></channel></rss>