<?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[Kleine Hilfe]]></title><description><![CDATA[<p>Also, das ist meine Aufgabe: Schreiben Sie eine Funktion, welche die Fakultät einer gegebenen Zahl n berechnet, ohne dass Sie eine if -Anweisung, eine switch -Anweisung oder eine Schleife verwenden.</p>
<p>Und das ist mein code:</p>
<p>#include&lt;iostream&gt;<br />
using namespace std;</p>
<p>int fak(int k)<br />
{<br />
int i=1;<br />
i*=k;<br />
((k&gt;1) ? fak(k-1) : 1);<br />
return i;<br />
}</p>
<p>int main()<br />
{<br />
int n;<br />
cout &lt;&lt; &quot;Geben Sie n ein : \0&quot;;<br />
cin &gt;&gt; n;<br />
cout &lt;&lt; fak(n);<br />
cout &lt;&lt; endl;</p>
<p>return 0;<br />
}</p>
<p>Wo habe meinen Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286815/kleine-hilfe</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 18:50:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286815.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 May 2011 23:48:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kleine Hilfe on Mon, 16 May 2011 23:48:54 GMT]]></title><description><![CDATA[<p>Also, das ist meine Aufgabe: Schreiben Sie eine Funktion, welche die Fakultät einer gegebenen Zahl n berechnet, ohne dass Sie eine if -Anweisung, eine switch -Anweisung oder eine Schleife verwenden.</p>
<p>Und das ist mein code:</p>
<p>#include&lt;iostream&gt;<br />
using namespace std;</p>
<p>int fak(int k)<br />
{<br />
int i=1;<br />
i*=k;<br />
((k&gt;1) ? fak(k-1) : 1);<br />
return i;<br />
}</p>
<p>int main()<br />
{<br />
int n;<br />
cout &lt;&lt; &quot;Geben Sie n ein : \0&quot;;<br />
cin &gt;&gt; n;<br />
cout &lt;&lt; fak(n);<br />
cout &lt;&lt; endl;</p>
<p>return 0;<br />
}</p>
<p>Wo habe meinen Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064370</guid><dc:creator><![CDATA[Stern]]></dc:creator><pubDate>Mon, 16 May 2011 23:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 01:51:55 GMT]]></title><description><![CDATA[<p>Stern schrieb:</p>
<blockquote>
<p>Wo habe meinen Fehler?</p>
</blockquote>
<p>Denkfehler! Du beziehst die Rückgabe der einzelnen Funktionsaufruf nicht in die Berechnung des Ergebnisses mit ein. So würde es gehen:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

int fak(int k)
{
	int i;
	k &gt; 1 ? i = k * fak(k-1) : i=1;
	return i;
}

int main()
{
	int n;
	cout &lt;&lt; &quot;Geben Sie n ein : \0&quot;;
	cin &gt;&gt; n;
	cout &lt;&lt; fak(n);
	cout &lt;&lt; endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064377</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Tue, 17 May 2011 01:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 06:15:14 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Du verwendest den Fragezeichenoperator wie if statt dessen Möglichkeiten zu nutzen. Wenn schon, dann statt</p>
<pre><code class="language-cpp">k &gt; 1 ? i = k * fak(k-1) : i=1;
</code></pre>
<p>lieber</p>
<pre><code class="language-cpp">i = k &gt; 1 ? k * fak(k-1) : 1;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">if(k &gt; 1) 
    i = k * fak(k-1)
else
    i=1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064392</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 17 May 2011 06:15:14 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 08:24:23 GMT]]></title><description><![CDATA[<p>moment mal...</p>
<p>der ? : operator ist doch auch ein if, nur abgekapselt?!?<br />
der compiler wandelt das doch intern auch in ein if um oder?</p>
<p>und dennach folgend wie soll die aufgabe dann gelöst werden?!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064440</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 17 May 2011 08:24:23 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 08:39:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">unsigned long one(int) { return 1; }
unsigned long fak(int x) {
  unsigned long (*fptrs[])(int) = { one, fak };

  return x * fptrs[x &gt; 1](x - 1);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064457</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 17 May 2011 08:39:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 08:46:19 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<pre><code class="language-cpp">unsigned long one(int) { return 1; }
unsigned long fak(int x) {
  unsigned long (*fptrs[])(int) = { one, fak };

  return x * fptrs[x &gt; 1](x - 1);
}
</code></pre>
</blockquote>
<p>Hehe, das ist gut. Da wär' ich nicht drauf gekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064465</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 17 May 2011 08:46:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 08:49:46 GMT]]></title><description><![CDATA[<p>Ach, und ich wollte gerade eine Wertetabelle vorschlagen (machbar, denn bereits 21! ist größer als ein 64-Bit unsigned long int), aber seldons Lösung ist schöner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064467</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 17 May 2011 08:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 09:25:07 GMT]]></title><description><![CDATA[<p>Jetzt noch der Klassiker <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<pre><code class="language-cpp">template&lt;int n&gt;
class faku
{
    static unsigned long long int value=n * faku&lt;n-1&gt;::value;
}

template&lt;&gt;
class faku&lt;0&gt;
{
    static unsigned long long int value = 1;
}
</code></pre>
<p>*edit: und ja, das ist eine Funktion, eine Metafunktion <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>moment mal...</p>
<p>der ? : operator ist doch auch ein if, nur abgekapselt?!?<br />
der compiler wandelt das doch intern auch in ein if um oder?</p>
<p>und dennach folgend wie soll die aufgabe dann gelöst werden?!?</p>
</blockquote>
<p>Ne, der ? : Operator ist schon was anderes als eine if-Abfrage. Schon semantisch ist das klar, probiere mal eine if-Abfrage in der Initialisierungsliste zu benutzen. Mit dem ? : Operator kein Problem.<br />
Den Operator kann man auch überall da benutzen, wo man eine RValue hinschreiben darf. Mit einer if bleibt man da schnell auf der Strecke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064499</guid><dc:creator><![CDATA[bmario]]></dc:creator><pubDate>Tue, 17 May 2011 09:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kleine Hilfe on Tue, 17 May 2011 09:39:04 GMT]]></title><description><![CDATA[<p>Eine Wertetabelle wäre zwar weniger hübsch, dafür aber schneller.</p>
<p>Allerdings braucht man die Fakultät jedenfalls in dieser Form in der Praxis eher selten; viele Anfänger sind bei Lottoprogrammen zum ersten Mal mit Integer-Überläufen in Berührung gekommen. Realitätsnäher dürfte Folgendes sein:</p>
<pre><code class="language-cpp">unsigned long one(int, int) { return 1; }
unsigned long fak_minmax(int n, int k) {
  unsigned long (*fptrs[])(int, int) = { one, fak_minmax };
  return n * fptrs[n - 1 &gt; k](n - 1, k);
}

unsigned long fak(int n) {
  return fak_minmax(n, 1);
}

unsigned long bin_coeff(int n, int k) {
  return fak_minmax(n, n - k) / fak(k);
}
</code></pre>
<p>Die etwas merkwürdige Implementation habe ich jetzt nur aus Bequemlichkeit übernommen. Wie weit man damit tatsächlich kommt, kann ich nicht verlässlich einschätzen; ich habe mit Kombinatorik bislang wenig am Hut.</p>
<p>Ansonsten stellt die <a href="http://www.boost.org/doc/libs/1_46_1/libs/mathdoc/sf_and_dist/html/math_toolkit/special/sf_gamma/tgamma.html" rel="nofollow">Gamma-Funktion</a> eine Verallgemeinerung der Fakultät dar, die für Mathematiker meistens sowieso interessanter sein dürfte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064510</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 17 May 2011 09:39:04 GMT</pubDate></item></channel></rss>