<?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[Funktion zur Fakultät]]></title><description><![CDATA[<p>Guten Tag liebes Forum,<br />
Ich lerne momentan Rekursion, als Beispiel gabs eine Funktion zur Fakultätsberechnung, Rekursion habe ich verstanden ( gibts ja nicht viel zu verstehen ) aber die Funktion zur Fakultät verstehe ich nicht, wäre lieb wenn mir das jemand mal erklären würde. Hier der Code:</p>
<pre><code class="language-cpp">long fakul( long n );

int main()
{
	long val;
    val = fakul( 6 );
	cout &lt;&lt; &quot;Fakultät aus 6 ist &quot; &lt;&lt; val &lt;&lt; '\n';
	val = fakul( 10 );
	cout &lt;&lt; &quot;Fakultät aus 10 ist &quot; &lt;&lt; val &lt;&lt; '\n';
	cin.get();
	return 0;
}

long fakul( long n )
{
	if( n )
	{
		return n * fakul( n - 1 );
	} 
	return 1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/295732/funktion-zur-fakultät</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 07:59:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295732.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Nov 2011 17:08:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:12:27 GMT]]></title><description><![CDATA[<p>Guten Tag liebes Forum,<br />
Ich lerne momentan Rekursion, als Beispiel gabs eine Funktion zur Fakultätsberechnung, Rekursion habe ich verstanden ( gibts ja nicht viel zu verstehen ) aber die Funktion zur Fakultät verstehe ich nicht, wäre lieb wenn mir das jemand mal erklären würde. Hier der Code:</p>
<pre><code class="language-cpp">long fakul( long n );

int main()
{
	long val;
    val = fakul( 6 );
	cout &lt;&lt; &quot;Fakultät aus 6 ist &quot; &lt;&lt; val &lt;&lt; '\n';
	val = fakul( 10 );
	cout &lt;&lt; &quot;Fakultät aus 10 ist &quot; &lt;&lt; val &lt;&lt; '\n';
	cin.get();
	return 0;
}

long fakul( long n )
{
	if( n )
	{
		return n * fakul( n - 1 );
	} 
	return 1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2146665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146665</guid><dc:creator><![CDATA[Miriiam]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:11:28 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Das sind 3 Zeilen. Ein if und zwei return, je nach Ausgang des ifs. Kannst du etwas konkreter werden, was es da dran nicht zu verstehen gibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146668</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:18:14 GMT]]></title><description><![CDATA[<p>Stimmt ich habe mich doof ausgedrückt.<br />
Die Funktion erkennt der Compiler anhand der Parameter das weiss ich, nun gut, dann kann man also if( parameter ) abfragen dann sucht der Compiler nach der Funktion in der, der Parameter n vorkommt oder ?</p>
<p>Dann verstehe ich das return nicht: wie geschiet da die berechnung der fakultät...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146671</guid><dc:creator><![CDATA[Miriiam]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:25:40 GMT]]></title><description><![CDATA[<p>Miriiam schrieb:</p>
<blockquote>
<p>Stimmt ich habe mich doof ausgedrückt.<br />
Die Funktion erkennt der Compiler anhand der Parameter das weiss ich, nun gut, dann kann man also if( parameter ) abfragen dann sucht der Compiler nach der Funktion in der, der Parameter n vorkommt oder ?</p>
<p>Dann verstehe ich das return nicht: wie geschiet da die berechnung der fakultät...</p>
</blockquote>
<p>Wie kannst du Rekursion verstanden haben, wenn du Funktionen noch nicht verstanden hast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146680</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:31:02 GMT]]></title><description><![CDATA[<p>Ich habe Funktionen verstanden war nur etwas verwirrt da ich die Funktion zur Fakultät nicht verstanden habe ich habe herumprobiert und es mit einer Iteration probiert wobei es viel einfacher und verständlicher ist:</p>
<pre><code class="language-cpp">long fakul( int n )
{
int x = n;
while( --x )
{ 
   n *= x;
}
return n;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2146684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146684</guid><dc:creator><![CDATA[Miriiam]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:34:18 GMT]]></title><description><![CDATA[<p>Miriiam schrieb:</p>
<blockquote>
<p>Ich habe Funktionen verstanden war nur etwas verwirrt da ich die Funktion zur Fakultät nicht verstanden habe ich habe herumprobiert und es mit einer Iteration probiert wobei es viel einfacher und verständlicher ist:</p>
<pre><code class="language-cpp">long fakul( int n )
{
int x = n;
while( --x )
{ 
   n *= x;
}
return n;
}
</code></pre>
</blockquote>
<p>&quot;viel einfacher und verständlicher&quot; ist Ansichtssache. Aber deine Aussage &quot;dann sucht der Compiler nach der Funktion in der, der Parameter n vorkommt oder ? &quot; zeigt mir z.B., dass du Funktionen wohl doch nicht verstanden hast.<br />
EDIT: Vielleicht bist du ja auch durch den Überladungs-Thread etwas durcheinandergekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146686</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:39:03 GMT]]></title><description><![CDATA[<p>Hallo Miriiam,</p>
<p>informiere dich mal über &quot;Abbruchbedingung&quot;.<br />
Dann solltest du auch die Fakultät verstehen (sowie die Rekursion an sich, denn bisher scheinst du sie doch nicht komplett verstanden zu haben <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>
<p>Vllt. hilft dir ja der Wiki-Beitrag <a href="http://de.wikipedia.org/wiki/Rekursive_Programmierung" rel="nofollow">http://de.wikipedia.org/wiki/Rekursive_Programmierung</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146688</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 17:50:29 GMT]]></title><description><![CDATA[<blockquote>
<p>&quot;viel einfacher und verständlicher&quot; ist Ansichtssache. Aber deine Aussage &quot;dann sucht der Compiler nach der Funktion in der, der Parameter n vorkommt oder ? &quot; zeigt mir z.B., dass du Funktionen wohl doch nicht verstanden hast.<br />
EDIT: Vielleicht bist du ja auch durch den Überladungs-Thread etwas durcheinandergekommen.</p>
</blockquote>
<p>Ja das kann gut sein das ich da durcheinander gekommen bin <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Aber es stimmt doch oder ? habe ich es doch nicht verstanden ..</p>
<blockquote>
<p>Informier dich mal über &quot;Abbruchbedingung&quot;.</p>
</blockquote>
<p>Werde ich machen, ich sag falls ich noch Fragen habe ( wenns ok ist ) danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Jetzt merk ich so nebenbei Abbruchbedingungen kenne ich doch lange aus Iterationen <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="😃"
    /> while () ...</p>
<p>Ich glaub ich bin einfach Dumm <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146692</guid><dc:creator><![CDATA[Miriiam]]></dc:creator><pubDate>Sun, 20 Nov 2011 17:50:29 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 19:13:07 GMT]]></title><description><![CDATA[<p>Miriiam schrieb:</p>
<blockquote>
<p>Aber es stimmt doch oder ? habe ich es doch nicht verstanden ..</p>
</blockquote>
<p>Ich sehe einfach keinen Sinn in diesem Satz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146729</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Sun, 20 Nov 2011 19:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 19:25:26 GMT]]></title><description><![CDATA[<p>So komisch es sich auch anhört aber ich habe und bin mir immernoch unsicher bei dieser If Abfrage:<br />
if( n )<br />
n ist ja der parameter aus der Funktion long fakul<br />
wenn ich ne funktion hätte int funktion( par1, par2 );<br />
könnte ich dann so prüfen : ?<br />
if ( par1 || par2 )<br />
{<br />
}</p>
<p>hab langsam das Gefühl ich habe es nicht verstanden ich wiederhole morgen nochmal die Funktionen und Rekursionen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146732</guid><dc:creator><![CDATA[Miriiam]]></dc:creator><pubDate>Sun, 20 Nov 2011 19:25:26 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 19:35:54 GMT]]></title><description><![CDATA[<p>Miriiam schrieb:</p>
<blockquote>
<p>wenn ich ne funktion hätte int funktion( par1, par2 );</p>
</blockquote>
<p>Da fehlen die Typen von par1 und par2.</p>
<blockquote>
<p>könnte ich dann so prüfen : ?<br />
if ( par1 || par2 )<br />
{<br />
}</p>
</blockquote>
<p>Hängt davon ab, was par1 und par2 sind. Wenn's beides booleans sind kannst Du so prüfen, ob mindestens einer davon true ist. Aber ich hab das Gefühl, das ist nicht, was Du meintest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146736</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Sun, 20 Nov 2011 19:35:54 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Sun, 20 Nov 2011 22:14:34 GMT]]></title><description><![CDATA[<p>Nein, du hast es nicht verstanden.</p>
<p>Überladung und Rekursion sind zwei völlig verschiedene Themen.</p>
<p>Aber fangen wir mal vorne an:</p>
<p>In C++ gibt es Funktionen. Diese sind gekennzeichnet durch einen Rückgabetyp, einem Namen für die Funktion und einer Liste von Parametern. Des weiteren haben Funktionen einen Funktionsrumpf, der die Funktion beschreibt.</p>
<p>Funktionen können &quot;aufgerufen&quot; werden, d. h. es wird zur Laufzeit an jeden Parameter ein Wert gebunden und mit diesen konkreten Werten alle Befehle des Funktionsrumpfes ausgeführt.</p>
<p>Eine Funktion heißt rekursiv, wenn in ihrem Funktionsrumpf ein Aufruf der Funktion selbst erfolgt. (In einem Duden würde ich Rekursion durch &quot;Siehe Rekursion&quot; erklären <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>
<p>Nun zu der Funktion fakul.</p>
<pre><code class="language-cpp">long fakul( long n ) 
{ 
    if( n ) 
    { 
        return n * fakul( n - 1 ); 
    } 
    return 1; 
}
</code></pre>
<p>Nach dieser Definition ist Fakul eine Funktion die einen <code>long int</code> als einzigen Parameter annimmt und einen <code>long int</code> zurück gibt.</p>
<p>Erfolgt nun ein Aufruf dieser Funktion mit z.B. dem Parameter 5, dann ist das erwartete Ergebnis 5! = 5*4*3*2*1 = 120. Bei dem Aufruf wird also die 5 an das <code>n</code> gebunden. An jeder Stelle, wo <code>n</code> vorkommt kann ich mir also für diesen Aufruf von fakul auch eine 5 denken!<br />
Die <code>if</code> prüft nun, ob n wahr ist, d.h. ob n != 0 ist. Da n an 5 gebunden ist und 5 != 0 gilt, wird also in die If gegangen.</p>
<p>In dieser If steht nun als einzige Anweisung, das sich die Rückgabe der Funktion berechnet aus n * fakul(-n1), also von 5 * fakul(5-1), also 5 *fakul(4). Wir müssen also zunächst das Ergebnis von fakul(4) wissen, bevor wir das Ergebnis von fakul(5) berechnen können.</p>
<p>Es erfolgt also ein Aufruf von fakul mit dem Parameter 4. An n wird nun für diesen Aufruf der Wert 4 gebunden. Abermals erfolgt der in der If die Überprüfung, ob n != 0 ist, also ob 4 != 0 ist, was wahr ist. Es geht also wieder in die If hinein. In dieser If ist nur eine Anweisung, nämlich, das Ergbenis berechnet sich als 4*fakul(3).</p>
<p>Dies wird sich jetzt fortsetzen, bis fakul mit einem Wert für den Paramter n aufgerufen wird, der nicht in die If geht. Dies löst die Abruchbedingung aus und die Rekursion endet.</p>
<p>Du kannst ja mal von fakul(3) ausgehend dies dir überlegen.</p>
<p>Hoffe das bringt etwas Licht ins Dunkel <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/2146800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146800</guid><dc:creator><![CDATA[bmario_]]></dc:creator><pubDate>Sun, 20 Nov 2011 22:14:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Mon, 21 Nov 2011 08:31:19 GMT]]></title><description><![CDATA[<p>Miriiam schrieb:</p>
<blockquote>
<p>[...] dann kann man also if( parameter ) abfragen dann sucht der Compiler nach der Funktion in der, der Parameter n vorkommt oder ?</p>
</blockquote>
<p>In diesem Kontext, der Parameter ist von einem Ganzzahltyp, ist &quot;if (n)&quot; äquivalent zu &quot;if (n!=0)&quot;. Der int-Wert wird (explizit) zu bool konvertiert, weil die if-Bedingung ein boolscher Kontext ist. Bei int: Aus 0 wird false und aus allem anderen wird true. Deswegen hast Du denselben Effekt, wenn Du statt (n) hier (n!=0) schreibst. Du hast hier also eine einfache Fallunterscheidung. Das ist die Abbruchbedingung der Rekursion, oder genauer: Das Negativ der Abbruchbedingung. So lange n!=0, wird sich die Funktion selbst mit einem neuen n aufrufen. Falls n==0 ist, kann direkt 1 zurückgegeben werden, da 0! = 1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146864</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 21 Nov 2011 08:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Mon, 21 Nov 2011 10:45:00 GMT]]></title><description><![CDATA[<p>Miriiam schrieb:</p>
<blockquote>
<p>hab langsam das Gefühl ich habe es nicht verstanden ich wiederhole morgen nochmal die Funktionen und Rekursionen!</p>
</blockquote>
<p>Kurz erklärt:</p>
<p><strong>Funktion</strong> --&gt; eine evtl. häufig benötigte Programmleistung mit einer Syntax wie hier long = facul(long n); Es wird ein Parameter der Funktion übergeben, die macht damit etwas und gibt mit return etwas zurück.<br />
<strong>Rekursion</strong> --&gt; Die Funktion hier ruft innerhalb der Funktion sich selbst auf.<br />
<strong>Abbruchkriterium</strong> --&gt; Ist in jeder rekursiven Funktion etwas tricky. Dies ist ein einfaches Beispiel zum Üben und Verstehen. Füge vor jedes return eine Kontrollausgabe für n ein und auch eine Kontrollausgabe, wo die rekursive Funktion aufgerufen wird. Oder nehme einen Debugger dafür.<br />
<strong>Noch unsicher</strong> --&gt; Wie selbst erkannt, vorläufig mit while arbeiten.</p>
<p>@ andere Poster: Haut dem Fragesteller das bitte nicht gleich um die Ohren! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146885</guid><dc:creator><![CDATA[berniebutt]]></dc:creator><pubDate>Mon, 21 Nov 2011 10:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion zur Fakultät on Mon, 21 Nov 2011 13:27:26 GMT]]></title><description><![CDATA[<p>Einmal ein großes Dankeschön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich bin mir jetzt sicher das ich es verstanden habe!<br />
Danke auch für die langen und kurzen Erklärungen kenn ich so auch aus anderen Foren wo es nicht ums programmieren geht gar nicht, das jemand der noch nicht viel Ahnung von etwas hat, nicht gleich schlecht behandelt wird !:)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2146947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2146947</guid><dc:creator><![CDATA[Miriiam]]></dc:creator><pubDate>Mon, 21 Nov 2011 13:27:26 GMT</pubDate></item></channel></rss>