<?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[Rekursionsdurchläufe mit if anweisung einmal zu viel]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lern grad c++ und hab a hoch b mittels rekursion zu lösen.<br />
Wenn ich in der unterfunktion rekursion die else anweisung ausklammere macht das programm einen durchlauf zu viel also : 2 hoch 2 = 8. Ist der else-zweig dabei so kommt das richtig ergebnis raus ( 2 hoch 2 = 4). Das verstehe ich nicht und hoffe, dass mir hier geholfen wird.</p>
<p>hier mein quellcode mit else:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;iomanip&gt;
#pragma hdrstop
#include &lt;conio&gt;

using namespace std;

#pragma argsused

int rekursion (int x, int y);

int main(void)
{
 int a, b, erg;
 cout &lt;&lt; &quot;Gib zwei zahlen ein [a b]&quot; &lt;&lt; endl;
 cin &gt;&gt; a &gt;&gt; b;

 erg = rekursion(a, b);
 cout &lt;&lt; &quot;a hoch b = &quot; &lt;&lt; erg &lt;&lt; endl;

 getchar();
 return 0;
}

 int rekursion (int x, int y)
 {
     if (y)
     {
        x = x * rekursion (x, y-1);
     }
     else
     {
        x = 1;
     }
     return x;
 }
</code></pre>
<p>wenn man also else { x = 1;} ausklammert funktionierts nicht</p>
<p>vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252531/rekursionsdurchläufe-mit-if-anweisung-einmal-zu-viel</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 09:29:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252531.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Oct 2009 08:37:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 08:37:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lern grad c++ und hab a hoch b mittels rekursion zu lösen.<br />
Wenn ich in der unterfunktion rekursion die else anweisung ausklammere macht das programm einen durchlauf zu viel also : 2 hoch 2 = 8. Ist der else-zweig dabei so kommt das richtig ergebnis raus ( 2 hoch 2 = 4). Das verstehe ich nicht und hoffe, dass mir hier geholfen wird.</p>
<p>hier mein quellcode mit else:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;iomanip&gt;
#pragma hdrstop
#include &lt;conio&gt;

using namespace std;

#pragma argsused

int rekursion (int x, int y);

int main(void)
{
 int a, b, erg;
 cout &lt;&lt; &quot;Gib zwei zahlen ein [a b]&quot; &lt;&lt; endl;
 cin &gt;&gt; a &gt;&gt; b;

 erg = rekursion(a, b);
 cout &lt;&lt; &quot;a hoch b = &quot; &lt;&lt; erg &lt;&lt; endl;

 getchar();
 return 0;
}

 int rekursion (int x, int y)
 {
     if (y)
     {
        x = x * rekursion (x, y-1);
     }
     else
     {
        x = 1;
     }
     return x;
 }
</code></pre>
<p>wenn man also else { x = 1;} ausklammert funktionierts nicht</p>
<p>vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795638</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Wed, 21 Oct 2009 08:37:50 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 08:40:15 GMT]]></title><description><![CDATA[<p>Wieso verstehst du das nicht? Wenn du die Funktion geschrieben hast, musst du doch wissen, wozu dieser Zweig gut ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795642</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 21 Oct 2009 08:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 08:47:26 GMT]]></title><description><![CDATA[<p>ich hab halt rum probiert...<br />
der zweig ist nur da um a hoch 0 abzufangen, denn sonst stürzt das programm ab, ich verstehe nicht wieso das aber auch einfluss auf die anzahl der durchläufe der if anweisung hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795646</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Wed, 21 Oct 2009 08:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 09:18:20 GMT]]></title><description><![CDATA[<p>Nö, ohne den Zweig kommt a^0 = a raus. Probieren ist ja ganz nett, aber man sollte immer wissen, was man tut. Lösch die Funktion und überleg dir von vorn, wie man die Potenz rekursiv definieren kann.</p>
<p>1. Wie sieht der Basisfall aus?<br />
2. Wie reduziere ich einen komplexeren Fall auf einen einfacheren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795664</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 09:27:42 GMT]]></title><description><![CDATA[<p>Ja, aber mir gehts ums prizip, ich möchte gern verstehen warum, wenn man den else- zweig löscht bei einer eingabe von 2 hoch 2 als ergebnis 8 rauskommt und wenn der else- zweig dabei ist eben 4.<br />
Denn der else-zweig sollte doch keinen einfluss auf die wiederholung der if anweisung haben???</p>
<p>Wenn ich mir irgendeine andere lösung überlege, verstehe ich ja das problem mit der if anweisung trotzdem nicht, und wenn später ähnliche dinge gebraucht werden, die komplexer sind find ich dann den fehler nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795673</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 09:30:16 GMT]]></title><description><![CDATA[<p>Hat Bashar doch schon geschrieben.</p>
<p>Rechne mal ohne den else-Zweig 2^0, 3^0 usw. aus. Vllt. bemerkst du da etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795674</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:30:16 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 09:34:39 GMT]]></title><description><![CDATA[<p>mimus schrieb:</p>
<blockquote>
<p>Ja, aber mir gehts ums prizip, ich möchte gern verstehen warum, wenn man den else- zweig löscht bei einer eingabe von 2 hoch 2 als ergebnis 8 rauskommt und wenn der else- zweig dabei ist eben 4.</p>
</blockquote>
<p>Du könntest das Programm einfach mal per Hand durchgehen (Papier und Bleistift). Für kleine Zahlen (2^2 oder so) sind das nur wenige Zeilen.</p>
<blockquote>
<p>Denn der else-zweig sollte doch keinen einfluss auf die wiederholung der if anweisung haben???</p>
</blockquote>
<p>Die if-Anweisung wird doch nicht wiederholt, da ist ja nirgends eine Schleife.</p>
<blockquote>
<p>Wenn ich mir irgendeine andere lösung überlege, verstehe ich ja das problem mit der if anweisung trotzdem nicht, und wenn später ähnliche dinge gebraucht werden, die komplexer sind find ich dann den fehler nicht...</p>
</blockquote>
<p>Naja, der Sinn meiner amateurpädagogischen Ausführung ist eigentlich, dass du genau dasselbe Programm nochmal schreibst, aber diesmal weißt wieso es funktioniert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795678</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 09:44:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">rekursion(2, 2) // da 2 != 0 wird daraus ...
2 * rekursion(2, 1) // da 1 != 0 wird daraus
2 * 2 * rekursion(2, 0) // 0 == 0 also wird der else-Zweig ausgefuehrt und die Rekursion gestoppt, die Rueckgabe ist 1
2 * 2 * 1
</code></pre>
<p>Falls der else-Zweig weggelassen wird, ist das zurueckgegebene x nicht 1 sondern gleich dem uebergebenen Parameter, hier 2. Daraus wird dann im letzten Schritt 2 * 2 * <strong>2</strong>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795685</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 09:54:22 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>jetzt ist der groschen gefallen,</p>
<p>ich hab mich irgendwie drauf versteift, dass beim rekursiven aufruf der if zweig wiederholt wird, und garnicht dran gedacht, dass ja die gesamte funktion aufgerufen wird und das im letzen durchlauf dann eben mit 1 statt x mulipliziert wird wenn else aktiv ist und somit das richtige ergebnis rauskommt.</p>
<p>vielen dank<br />
und liebe grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795687</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Wed, 21 Oct 2009 09:54:22 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 10:39:44 GMT]]></title><description><![CDATA[<p>hab zu dem thema doch noch ne frage:</p>
<pre><code>int rekursion (int x, int y)
 {

     if (y)
     {
        return x * rekursion (x, y-1);
     }
     else
     {
        x = 1;
        return x;
     }
</code></pre>
<p>man kann die rekursion ja auch so umschreiben, aber wo ist dann das ergebnis von</p>
<pre><code>x * rekursion (x, y-1);
</code></pre>
<p>gespeichert während die funktion sich immer selbst aufruft?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795703</guid><dc:creator><![CDATA[mimus]]></dc:creator><pubDate>Wed, 21 Oct 2009 10:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 10:44:30 GMT]]></title><description><![CDATA[<p>Zitier die Zeile doch komplett, dann dürfte es klar sein (=&gt;Rückgabewert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795708</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 21 Oct 2009 10:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursionsdurchläufe mit if anweisung einmal zu viel on Wed, 21 Oct 2009 11:15:11 GMT]]></title><description><![CDATA[<blockquote>
<p>man kann die rekursion ja auch so umschreiben, aber wo ist dann das ergebnis von</p>
</blockquote>
<p>Es liegt noch nicht vor, da erst der rekursive Ausdruck noch ausgewertet werden muss. Der Sinn von Rekursion ist: Berechne erstmal ein einfacheres Problem und benutze das Ergebnis fuer dein groesseres Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1795728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1795728</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 21 Oct 2009 11:15:11 GMT</pubDate></item></channel></rss>