<?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[Referenz Verständnis - factorial]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mal bisschen mit Referenzen rumprobiert und folgende factorialfunktion geschrieben:</p>
<pre><code class="language-cpp">factorial_1(int&amp;a){
if(a&lt;=1) return 1; 
else { 
a=a-1; 
return (a+1)*factorial(a );
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">int factorial_2(int&amp;a){
if(a&lt;=1) return 1; 
else return a*factorial(a=a-1);
}
</code></pre>
<p>Factorial_1 berechnet mir das richtige Ergebnis, Factorial_2 gibt immer 1 zurück.<br />
Kann mir jemand mal diese Sachlage verdeutlichen. Wieso ist das so?<br />
factorial_1 müsste doch auch fehlerhaft sein, da ich immer ne Referenz übergebe und in jedem Schritt a dekrementiert wird. Am Ende, wenn ich die Multiplikation von a_i auswerte, müssten doch falsche Werte in a stehen?</p>
<p>Und wieso funktioniert factorial_2 nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275429/referenz-verständnis-factorial</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 01:17:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275429.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Oct 2010 13:31:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Referenz Verständnis - factorial on Thu, 14 Oct 2010 13:31:48 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe mal bisschen mit Referenzen rumprobiert und folgende factorialfunktion geschrieben:</p>
<pre><code class="language-cpp">factorial_1(int&amp;a){
if(a&lt;=1) return 1; 
else { 
a=a-1; 
return (a+1)*factorial(a );
}
</code></pre>
<p>und</p>
<pre><code class="language-cpp">int factorial_2(int&amp;a){
if(a&lt;=1) return 1; 
else return a*factorial(a=a-1);
}
</code></pre>
<p>Factorial_1 berechnet mir das richtige Ergebnis, Factorial_2 gibt immer 1 zurück.<br />
Kann mir jemand mal diese Sachlage verdeutlichen. Wieso ist das so?<br />
factorial_1 müsste doch auch fehlerhaft sein, da ich immer ne Referenz übergebe und in jedem Schritt a dekrementiert wird. Am Ende, wenn ich die Multiplikation von a_i auswerte, müssten doch falsche Werte in a stehen?</p>
<p>Und wieso funktioniert factorial_2 nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965573</guid><dc:creator><![CDATA[invoices]]></dc:creator><pubDate>Thu, 14 Oct 2010 13:31:48 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz Verständnis - factorial on Thu, 14 Oct 2010 13:43:16 GMT]]></title><description><![CDATA[<p>Es ist nicht festgelegt, in welcher Reihenfolge Unterausdrücke abgearbeitet werden. Anscheinend führt Dein Compiler den rekursiven Funktionsaufruf zuerst aus und multipliziert <em>dann</em> erst das Ergebnis mit dem Wert, der von a referenziert wird (also immer 1).</p>
<p>Es ist hoffentlich klar, dass Das mit den Referenzen hier überhaupt keinen Sinn macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965582</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 14 Oct 2010 13:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Referenz Verständnis - factorial on Thu, 14 Oct 2010 13:56:15 GMT]]></title><description><![CDATA[<p>Wie krümelkacker bereits gesagt hat sind die Referenzen sinnlos. Wiso überhaupt so kompliziert, machs doch einfach so:</p>
<pre><code class="language-cpp">unsigned long factorial( int n )
{
	if( n &lt;= 1 )
		return 1;

	return n * factorial( n - 1 );
}
</code></pre>
<p>(Habs jetzt nicht getestet, müsste so aber schon stimmen. Eventuell könntst du ja noch hinzufügen, dass n nicht negativ sein soll).</p>
<p>*Edit<br />
So, jetzt sollte es gehen. Hatte noch einen peinlichen Fehler drin ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965590</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Thu, 14 Oct 2010 13:56:15 GMT</pubDate></item></channel></rss>