<?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 baut sich auf und wieder ab]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte einen rekursiven Algo programmieren, um die Rekursion besser zu verstehen. Der Algoritmus soll Zahlen von 1 bis n addieren und dann ausgeben. Die Funktion 'funct1' ruft sich dabei immer wieder selber auf, bis die 1 erreicht ist. Die Funktion funktioniert auch, das Problem ist nur, dass sie am Ende die addierten Zahlen wieder zurückzählt??? Das was sie schön zusammengerechnet hat, rechnet sie wieder schön zurück (Ein Mist). Ich find den Fehler nicht, seht ihr ihn?</p>
<p>Es geht um folgenden Algo:</p>
<p>---</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int Wert, Summe=0;</p>
<p>int funct1 (int n, int sum)<br />
{<br />
int summe;<br />
if (n==1) {</p>
<p>sum+=1;<br />
summe=sum;</p>
<p>} else {</p>
<p>sum+=n;<br />
funct1(n-1, sum);<br />
}<br />
return summe;<br />
}</p>
<p>int main()<br />
{</p>
<p>printf(&quot;Geben sie n ein: &quot;);<br />
scanf(&quot;%d&quot;, &amp;Wert);</p>
<p>funct1(Wert, Summe);<br />
printf(&quot;Die Summe ist %d&quot;, funct1(Wert, Summe));<br />
getch();</p>
<p>return 0;<br />
}</p>
<p>--- <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126066/rekursive-funktion-baut-sich-auf-und-wieder-ab</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 15:56:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126066.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Nov 2005 14:33:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 14:33:48 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich möchte einen rekursiven Algo programmieren, um die Rekursion besser zu verstehen. Der Algoritmus soll Zahlen von 1 bis n addieren und dann ausgeben. Die Funktion 'funct1' ruft sich dabei immer wieder selber auf, bis die 1 erreicht ist. Die Funktion funktioniert auch, das Problem ist nur, dass sie am Ende die addierten Zahlen wieder zurückzählt??? Das was sie schön zusammengerechnet hat, rechnet sie wieder schön zurück (Ein Mist). Ich find den Fehler nicht, seht ihr ihn?</p>
<p>Es geht um folgenden Algo:</p>
<p>---</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int Wert, Summe=0;</p>
<p>int funct1 (int n, int sum)<br />
{<br />
int summe;<br />
if (n==1) {</p>
<p>sum+=1;<br />
summe=sum;</p>
<p>} else {</p>
<p>sum+=n;<br />
funct1(n-1, sum);<br />
}<br />
return summe;<br />
}</p>
<p>int main()<br />
{</p>
<p>printf(&quot;Geben sie n ein: &quot;);<br />
scanf(&quot;%d&quot;, &amp;Wert);</p>
<p>funct1(Wert, Summe);<br />
printf(&quot;Die Summe ist %d&quot;, funct1(Wert, Summe));<br />
getch();</p>
<p>return 0;<br />
}</p>
<p>--- <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/915171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915171</guid><dc:creator><![CDATA[epistula]]></dc:creator><pubDate>Fri, 11 Nov 2005 14:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 14:49:07 GMT]]></title><description><![CDATA[<p>Wenn du die Funktion schon als int.. deklarierst, kannst du deine Ergebnisse auch per return zurückgeben.</p>
<p>(oder du definierst die Funktion als &quot;int func1(int n,int&amp; sum);&quot; dann kann sie den übergebenen Parameter auch verändern)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915203</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 11 Nov 2005 14:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 14:56:24 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du die Funktion schon als int.. deklarierst, kannst du deine Ergebnisse auch per return zurückgeben.</p>
</blockquote>
<p>Das solltest du auf jeden Fall machen, da du sonst krampfhaft<br />
versuchst, aus einer iterativen Funktion, eine Rekursive zu machen.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>(oder du definierst die Funktion als &quot;int func1(int n,int&amp; sum);&quot; dann kann sie den übergebenen Parameter auch verändern)</p>
</blockquote>
<p>Das löst das Problem nicht.</p>
<p>Mal dir den Stack mal für n=2 auf; insbesondere solltest du auf<br />
lokale Variablen achten!<br />
Und wenn du schon dabei bist, dann pack mal Summe und Wert in<br />
die main-Funktion.</p>
<p>Jockel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915227</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 11 Nov 2005 14:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 15:12:03 GMT]]></title><description><![CDATA[<p>Ich glaube mal du wärst im C Forum besser aufgehoben, und ich glaube dass du das hier meinst:</p>
<pre><code class="language-cpp">unsigned sum(unsigned n)
{
    if(n == 0) {
        return 0;
    }
    else {
        return n + sum(n - 1);
    }
}
</code></pre>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915251</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 11 Nov 2005 15:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 15:31:51 GMT]]></title><description><![CDATA[<pre><code>int funct1 (int n, int sum)
{
    int summe;
    if (n==1) {

    sum+=1;
    summe=sum;

} else 
{

    sum+=n;
    funct1(n-1, sum);

}
    return sum;
} 
int main(int argc, char *argv[])
{
    int Wert, Summe=0;
    printf(&quot;Geben sie n ein: &quot;);
    scanf(&quot;%d&quot;, &amp;Wert);

    Summe=funct1(Wert, Summe);
    printf(&quot;Die Summe ist %d&quot;, funct1(Wert, Summe));
    getch();
}
</code></pre>
<p>ich weis zwar nicht ganz genau was du damit bezwecken willst aber versuchs dochmal so^^</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915267</guid><dc:creator><![CDATA[planlos_blabla]]></dc:creator><pubDate>Fri, 11 Nov 2005 15:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 15:46:29 GMT]]></title><description><![CDATA[<p>Hast du es denn probiert?</p>
<p>Jockelx schrieb:</p>
<blockquote>
<p>Mal dir den Stack mal für n=2 auf; insbesondere solltest du auf<br />
lokale Variablen achten!<br />
Jockel</p>
</blockquote>
<p>Jockel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915286</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 11 Nov 2005 15:46:29 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Fri, 11 Nov 2005 22:06:01 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>bin grad nach Hause gekommen. Ich probier es morgen früh mal aus und sag euch morgen mal die Ergebnisse.</p>
<p>An alle denen der Algo noch nicht ganz klar ist:</p>
<p>Angenommen n==5, dann ergibt sich sum aus sum=5. Bei den rekursiven Aufrufen wird n dann immer um 1 vermindert und zu sum addiert bis n==1 ist (also sum=5+4+3+2+1). Wenn n==1 ist soll dann diese Summe zurückgeliefert werden.</p>
<p>Das Programm soll also rekursiv die Summe von 1 bis n berechnen. Ich könnt den Algo ja mal debuggen, dann seht ihr mein Problem.</p>
<p>Aber wie gesagt, schon mal danke und ich probier eure Vorschläge morgen mal aus.</p>
<p>Gute Nacht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915595</guid><dc:creator><![CDATA[epistula]]></dc:creator><pubDate>Fri, 11 Nov 2005 22:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Sat, 12 Nov 2005 09:25:39 GMT]]></title><description><![CDATA[<p>*folgt Jockel's Rat und verfolgt den Stack-Aufbau*</p>
<pre><code>func(n=2,sum=0):
  sum+=n:sum=2
  func((n-1)=1,sum=2)
    func(n=1,sum=2)
      sum+=1:sum=3
      summe=sum:summe=3
      return sum:Rückgabewert 3
  Rückgabe von func(1,2) wurde ignoriert, Werte sind unverändert (Call by value)
  return sum:Rückgabewert 2

-&gt; in main: Summe=2
printf()-&gt;func(n=2,sum=2):
  sum+=n:sum=4
  ...(siehe oben)
  -&gt;Ausgabe 4
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10363">@epistula</a>: Parameter werden immer per Wert übergeben, also kann die Funktion dort keine Änderungen nach außen übermitteln. Und da du die Rückgabe des rekursiven Aufrufes ignorierst, ist er im Endeffekt völlig wirkungslos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915700</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 12 Nov 2005 09:25:39 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Sun, 13 Nov 2005 12:36:29 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>dank eurer Hilfe hat es jetzt geklappt. Danke vor allem an FireFlow. So sieht der Algo jetzt aus:</p>
<p>-----</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;conio.h&gt;</p>
<p>int sum(int n)<br />
{<br />
if(n == 0) {<br />
return 0;<br />
}<br />
else {<br />
return n + sum(n - 1);<br />
}<br />
}</p>
<p>int main()<br />
{<br />
int wert;</p>
<p>printf(&quot;Geben sie n ein: &quot;);<br />
scanf(&quot;%d&quot;, &amp;wert);</p>
<p>sum(wert);<br />
printf(&quot;Die Summe ist %d&quot;, sum(wert));<br />
getch();</p>
<p>return 0;<br />
}</p>
<p>-----</p>
<p>Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/916662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/916662</guid><dc:creator><![CDATA[epistula]]></dc:creator><pubDate>Sun, 13 Nov 2005 12:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Mon, 14 Nov 2005 10:27:57 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich hab doch noch eine Frage. Wie sehe 'int sum' eigentlich aus, wenn man ein Array nutzen möchte? Passt zwar jetzt nicht so ganz zu dem Algo, nur mal theoretisch. Geht das mit int sum[100](int n)? Wie löst man dann den Rücksprung?</p>
<p>Grüße!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/917127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/917127</guid><dc:creator><![CDATA[epistula]]></dc:creator><pubDate>Mon, 14 Nov 2005 10:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursive Funktion baut sich auf und wieder ab on Mon, 14 Nov 2005 10:30:48 GMT]]></title><description><![CDATA[<p>Arrays kannst du nicht zurückgeben, nur Pointer auf dynamisch erzeugte Arrays (&quot;r=new int[100];...return r;&quot; - muß der aufrufende mit delete[] wieder freigeben) oder STL-Arrayklassen (vector,deque,valarray o.ä.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/917130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/917130</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Mon, 14 Nov 2005 10:30:48 GMT</pubDate></item></channel></rss>