<?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[Wie komme ich auf das Ergebnis?]]></title><description><![CDATA[<p>Hey ich versuche gerade einen Code nachzuvollziehen. Ich bin nicht sehr gut im Programmieren und lerne es gerade noch aber irgendwie verzweifle ich gerade total.</p>
<p>Wie komme ich bei folgendem Code auf das Ergebnis 11?</p>
<p>int f ( int v )<br />
{<br />
if ( v == 1 || v == 0)<br />
return 1;<br />
if ( v%2 == 0)<br />
return f (v/2)+2;<br />
else<br />
return f (v-1)+3;<br />
}<br />
int main ( )<br />
{<br />
cout &lt;&lt; f (7) ;<br />
}</p>
<p>Wäre super wenn es mir einer erklären könnte. Ich vermute, dass es irgendwie mit dem f bei &quot;return f (v-1)+3&quot; zusammenhängt.</p>
<p>MfG<br />
Jan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/300251/wie-komme-ich-auf-das-ergebnis</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 22:00:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/300251.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Feb 2012 18:13:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie komme ich auf das Ergebnis? on Tue, 28 Feb 2012 18:13:17 GMT]]></title><description><![CDATA[<p>Hey ich versuche gerade einen Code nachzuvollziehen. Ich bin nicht sehr gut im Programmieren und lerne es gerade noch aber irgendwie verzweifle ich gerade total.</p>
<p>Wie komme ich bei folgendem Code auf das Ergebnis 11?</p>
<p>int f ( int v )<br />
{<br />
if ( v == 1 || v == 0)<br />
return 1;<br />
if ( v%2 == 0)<br />
return f (v/2)+2;<br />
else<br />
return f (v-1)+3;<br />
}<br />
int main ( )<br />
{<br />
cout &lt;&lt; f (7) ;<br />
}</p>
<p>Wäre super wenn es mir einer erklären könnte. Ich vermute, dass es irgendwie mit dem f bei &quot;return f (v-1)+3&quot; zusammenhängt.</p>
<p>MfG<br />
Jan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186744</guid><dc:creator><![CDATA[Jan25HH]]></dc:creator><pubDate>Tue, 28 Feb 2012 18:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to Wie komme ich auf das Ergebnis? on Tue, 28 Feb 2012 18:16:34 GMT]]></title><description><![CDATA[<p>1. Das: % ist der Modulo Operator.<br />
2. f(x) ruft die Funktion einfach <em>rekursiv</em> auf.</p>
<p>Damit solltest du das Problem lösen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186745</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Tue, 28 Feb 2012 18:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie komme ich auf das Ergebnis? on Tue, 28 Feb 2012 18:18:49 GMT]]></title><description><![CDATA[<p>Jan25HH schrieb:</p>
<blockquote>
<p>Wie komme ich bei folgendem Code auf das Ergebnis 11?</p>
<pre><code class="language-cpp">int f ( int v )
{
  if ( v == 1 || v == 0)
    return 1;
  if ( v%2 == 0)
    return f (v/2)+2;
  else 
    return f (v-1)+3;
}
#include &lt;iostream&gt;

int main ( )
{
  cout &lt;&lt; f(7);
}
</code></pre>
</blockquote>
<pre><code>cout &lt;&lt; f(7);
</code></pre>
<p>also:</p>
<pre><code>int f (7)
{
//  if ( v == 1 || v == 0)
//    return 1;
//  if ( v%2 == 0)
//    return f (v/2)+2;
//  else 
    return f (v-1)+3; // &lt;-
}
</code></pre>
<p>also</p>
<pre><code>int g(int v)
{
  return f(v)+3;
}

int f(6)
{
//  if ( v == 1 || v == 0)
//    return 1;
  if ( v%2 == 0)
    return f (v/2)+2; // &lt;-
//  else 
//    return f (v-1)+3;
}
</code></pre>
<p>usw.</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186746</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 28 Feb 2012 18:18:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wie komme ich auf das Ergebnis? on Tue, 28 Feb 2012 19:32:25 GMT]]></title><description><![CDATA[<p>Jan25HH schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int f(int v)
{
    if (v == 1 || v == 0)
        return 1;

    if (v%2 == 0)
        return f(v/2) + 2;
    else
        return f(v-1) + 3;
}

int main()
{
    cout &lt;&lt; &quot;6 % 2 = &quot; &lt;&lt; 6%2 &lt;&lt; endl;
    cout &lt;&lt; &quot;7 % 2 = &quot; &lt;&lt; 7%2 &lt;&lt; endl;
    cout &lt;&lt; &quot;f(7) = &quot; &lt;&lt; f(7) &lt;&lt; endl;
}
</code></pre>
<p>Wäre super wenn es mir einer erklären könnte.</p>
<p>MfG<br />
Jan</p>
</blockquote>
<p>Ok, mal aufdröseln das ganze, du rufst die Funktion f auf und übergibst ihr einen Integerwert 7, die erste IF bedingung prüft ob dein übergebener Wert = oder 1 ist.</p>
<p>Da er das nicht ist, geht es in der nächsten IF Bedingung weiter, dort wird mit Modulo (<a href="http://de.wikipedia.org/wiki/Division_mit_Rest#Modulo" rel="nofollow">http://de.wikipedia.org/wiki/Division_mit_Rest#Modulo</a>) geprüft ob dein übergebener Wert garde oder ungrade ist, dabei steht das Ergebnis 0 für grade (kein Rest) und 1 für ungrade. (In diesem Fall, also Wert%2).</p>
<p>Je nachdem wird dann die Funktion selber erneut aufgerufen und ihr entweder bei graden Zahlen dein Wert/2 übergeben und zwei dazugezählt, oder bei ungraden Zahlen dein Wert-1 übergeben und 3 dazu gezählt.</p>
<p>Daraus ergibt sich dann:</p>
<p>Dein Wert 7</p>
<p>7%2 = 1 (also Rest und ungrade Zahl)</p>
<p>Demnach gibt dir deine Funktion f(7-1)+3 Zurück aber das ist auch wieder rekursiv (<a href="http://de.wikipedia.org/wiki/Rekursiv" rel="nofollow">http://de.wikipedia.org/wiki/Rekursiv</a>) und wird demnach auch nochmal durch diese Funktion geschickt als das 7-1 = 6 also return f(6) + 3, das kann man ne ganze Weile lang machen und so ist diese Funktion auch aufgebaut. Dabei schützt die erste IF bedingung eigendlich nur vor einem, einer Division durch null.</p>
<p>Hoffe das hilft dir ein bisschen zum Verständnis.<br />
[Edit: bechstaben Verwuchselt und Proggy mal in lesbare Form gebracht]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186769</guid><dc:creator><![CDATA[Videonauth]]></dc:creator><pubDate>Tue, 28 Feb 2012 19:32:25 GMT</pubDate></item><item><title><![CDATA[Reply to Wie komme ich auf das Ergebnis? on Tue, 28 Feb 2012 19:38:29 GMT]]></title><description><![CDATA[<p>Also ich glaube ich habe es verstanden:</p>
<p>f(7):<br />
f(6) + 3<br />
f(3) + 2 + 3<br />
f(2) + 3 + 2 + 3<br />
f(1) +3 +2 +3 +2<br />
1==1 gibt 1 aus und ich habe am ende<br />
3+2+3+2+1= 11 ?</p>
<p>Wenn das richtig sein sollte bedanke ich mich sehr. ich stand da doch sehr aufm schlauch und habe immer das f mit reingerechnet aber das das rekursiv ist habe ich auch nicht gesehen.</p>
<p>Vielen Dank an euch alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186772</guid><dc:creator><![CDATA[Jan25HH]]></dc:creator><pubDate>Tue, 28 Feb 2012 19:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to Wie komme ich auf das Ergebnis? on Tue, 28 Feb 2012 19:50:04 GMT]]></title><description><![CDATA[<p>Das ist exakt, der Sinn dieser Übung liegt im grundlegenden darin ein Programm zu lesen und zu verstehen warum das Ergebnis kommt. Solche Funktionen in dieser Art werden dir im wahren Leben selten über den Weg laufen, aber wenn man ungewöhnliche Ausgaben bekommt ist es gut nachvollziehen zu können was passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2186776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2186776</guid><dc:creator><![CDATA[Videonauth]]></dc:creator><pubDate>Tue, 28 Feb 2012 19:50:04 GMT</pubDate></item></channel></rss>