<?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[Rekursion Overflow]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich suche die kleinste Zahl, die durch alle Zahlen von 1-20 teilbar sind.<br />
Folgende Rekursion habe ich.<br />
für die Zahlen von 1-10 gehts noch, aber bei 20 overflowt der Stack.</p>
<p>Denkanstoß ist gefragt.</p>
<p>Code:</p>
<pre><code class="language-cpp">// i=10 beim ersten Aufruf

void func(int i)
{

	for(int counter=2; counter&lt;=20; counter++) //counter&lt;=10 geht noch
	{
		if(i%counter!=0)
		func(i+1);
	}

	cout &lt;&lt; &quot;die zahl lautet &quot; &lt;&lt; i;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/210494/rekursion-overflow</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 13:38:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210494.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Apr 2008 16:20:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 16:31:55 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich suche die kleinste Zahl, die durch alle Zahlen von 1-20 teilbar sind.<br />
Folgende Rekursion habe ich.<br />
für die Zahlen von 1-10 gehts noch, aber bei 20 overflowt der Stack.</p>
<p>Denkanstoß ist gefragt.</p>
<p>Code:</p>
<pre><code class="language-cpp">// i=10 beim ersten Aufruf

void func(int i)
{

	for(int counter=2; counter&lt;=20; counter++) //counter&lt;=10 geht noch
	{
		if(i%counter!=0)
		func(i+1);
	}

	cout &lt;&lt; &quot;die zahl lautet &quot; &lt;&lt; i;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1490465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490465</guid><dc:creator><![CDATA[XaTrIxX]]></dc:creator><pubDate>Fri, 11 Apr 2008 16:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 16:46:00 GMT]]></title><description><![CDATA[<p>Ich würde das ganze etwas modularer (;)) aufbauen.<br />
Zuerst eine Funktion, die auf Teilbarkeit durch einen Bereich überprüft:</p>
<pre><code class="language-cpp">template &lt;unsigned int lower_bound,
		  unsigned int upper_bound&gt;
bool is_divisible_by_range(unsigned int number)
{
	for (unsigned int divisor = lower_bound; 
					  divisor &lt;= upper_bound;
					  ++divisor)
	{
		if (number % divisor != 0)
			return false;
	}

	return true;
}
</code></pre>
<p>Dann eine, die die kleinste Zahl sucht, für die diese Bedingung erfüllt ist:</p>
<pre><code class="language-cpp">template &lt;unsigned int lower_bound,
		  unsigned int upper_bound&gt;
unsigned int smallest_divisible_by_range()
{
	for (unsigned int i = 1; 
		i &lt;= std::numeric_limits &lt;unsigned int&gt;::max(); ++i)
	{
		if (is_divisible_by_range &lt;lower_bound, upper_bound&gt; (i))
			return i;
	}

	return 0;
}
</code></pre>
<p>Das Ergebnis lässt du dir dann anzeigen (;)):</p>
<pre><code class="language-cpp">int main()
{
	std::cout &lt;&lt; smallest_divisible_by_range &lt;1, 20&gt; () &lt;&lt; std::endl;
}
</code></pre>
<p>(Achtung, es können noch Fehler im Code sein)</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490480</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Fri, 11 Apr 2008 16:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 17:14:02 GMT]]></title><description><![CDATA[<p>ich will was lernen, und keinen fertigen code haben:</p>
<p>also warum bei meinem beispiel overflow?<br />
und was bringts bei dem beispiel modular zu sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490495</guid><dc:creator><![CDATA[XaTrIxX]]></dc:creator><pubDate>Fri, 11 Apr 2008 17:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 17:25:04 GMT]]></title><description><![CDATA[<p>XaTrIxX schrieb:</p>
<blockquote>
<p>also warum bei meinem beispiel overflow?</p>
</blockquote>
<p>Die Frage sollte eher sein: Warum kommt es bei manchen Rekursionen nicht zu einem Stackoverflow? Das liegt daran, dass die Rekursionstiefe noch recht klein ist. Ab wann der Stack nicht mehr ausreicht, ist leider nicht gut festzustellen, sprich man kann nicht einfach wie bei der dynamischen Speicherverwaltung eine Exception vom Typ bad_alloc fangen, das Programm stürzt einfach ab. Wenn du halbwegs weisst, wie <a href="http://de.wikipedia.org/wiki/Rekursive_Programmierung" rel="nofollow">Rekursion</a> funktioniert, dürfte dir klar sein, warum Rekursion anfällig für Stackoverflows ist.</p>
<p>XaTrIxX schrieb:</p>
<blockquote>
<p>und was bringts bei dem beispiel modular zu sein?</p>
</blockquote>
<p>Auch hier ist die Frage etwas undeutlich gestellt. Es bringt natürlich Vorteile. Wiederverwendbarkeit, Wartbarkeit, leicht verständlicher Code (dein Beispielcode hat mich erst etwas verwirrt: eine Funktion mit dem vielsprechenden Namen func, die eine simple Schleife rekursiv implementiert, einen Wert ausgeben soll (laut Beschreibung), aber in jedem Rekursionsdurchlauf einen Wert ausgibt).</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490498</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Fri, 11 Apr 2008 17:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 17:50:57 GMT]]></title><description><![CDATA[<p>erstmal fidne ichs schön, dass jemand selsbt denken will <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="🙂"
    /></p>
<p>die antwort auf deine Frage ist: die kleinste zahl die durch die zahlen 1-20 teilbar ist, ist die zahl 2*3*5*7*11*13*17*19=9699690 und genau der Wert ist deine Rekursionstiefe. bissl viel, oder?</p>
<p>nebenbei hat dein algo ein Problem: er wird ewig rechnen. wenn nicht sogar länger.</p>
<p>Du terminierst die Schleife nicht, wenn du die Funktion aufgerufen hast. das kannst du aber, denn selbst wenn die nächsten Schleifendurchläufe richtig sind, die zahl ist sicher nicht die gesuchte. Also werden in jeder deiner Funktionen bis zu 20 folge funktionen aufgerufen. also îm worst case irgendwas um20^9699690 funktionen die aufgerufen werden. Das ding wird niemals fertig gerechnet 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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13710">@Don06</a> was meinste, wird jemand der mit rekursion noch nicht zurechtkommt, mit templates fertigwerden? Nebenebi machst du aus einem einfachen 5 Zeiler(geschätzt) ne recht komplizierte sache. Ob das zur wiederverwendbarkeit beiträgt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490506</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 11 Apr 2008 17:50:57 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 17:51:47 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>die antwort auf deine Frage ist: die kleinste zahl die durch die zahlen 1-20 teilbar ist, ist die zahl 2*3*5*7*11*13*17*19=9699690</p>
</blockquote>
<p>Nicht ganz, versuch mal die Zahl durch 4, 8, 16 oder 9 zu teilen <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>Laut meinem Algo ist die Zahl 2<sup>4*3</sup>2*5*7*11*13*17*19 = 232792560</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490508</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Fri, 11 Apr 2008 17:51:47 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 17:51:56 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a>: 5*7*9*11*13*16*17*19=232792560<br />
An der Argumentation ändert das natürlich nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490509</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 11 Apr 2008 17:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 18:03:05 GMT]]></title><description><![CDATA[<p>tatsächlich, sie rechnet wirklich ewig.<br />
Dickes, dickes Sorry an der Stelle, wie kann man nur so einen Anfängerfehler einbauen?</p>
<p>Nun. ich glaub das beste wär wohl gleich einen anderen Ansatz haben oder?</p>
<p>Alle primzahlen von 1-20 miteinander rausfinden und miteinander multiplizieren.<br />
Könnte passen, oder?</p>
<p>Danke für die Erklärung wegen des Stacks. Klare Sache jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490515</guid><dc:creator><![CDATA[XaTrIxX]]></dc:creator><pubDate>Fri, 11 Apr 2008 18:03:05 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 18:03:21 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a>: 5*7*9*11*13*16*17*19=232792560<br />
An der Argumentation ändert das natürlich nichts.</p>
</blockquote>
<p>ich bin meine Punkte in HöMa nicht wert <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/1490516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490516</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 11 Apr 2008 18:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 18:06:12 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a>: 5*7*9*11*13*16*17*19=232792560<br />
An der Argumentation ändert das natürlich nichts.</p>
</blockquote>
<p>ich bin meine Punkte in HöMa nicht wert <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>
</blockquote>
<p>macht nix, campers rechnung stimmt auch nicht. <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="😃"
    /><br />
Die Zahl mag ja richtig sein, aber das produkt links enthält nur ungerade zahlen... da kann das ergebnis nicht gerade sein. <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/1490519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490519</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 11 Apr 2008 18:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 19:22:43 GMT]]></title><description><![CDATA[<p>bringt hier zwar nicht allzu viel, aber bei rekursiven funktionen sollte man immer drauf achten die lokalen variablen grössentechnsch zu minimieren:</p>
<pre><code class="language-cpp">void func(const int&amp; i) 
{ 
    for(short counter=2; counter&lt;=20; counter++) 
        if(i%counter!=0) func(i+1); 

    cout &lt;&lt; &quot;die zahl lautet &quot; &lt;&lt; i; 
}
</code></pre>
<p>damit kommst du bestimmt bis 11 <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/1490569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490569</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 11 Apr 2008 19:22:43 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 19:39:13 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5202">@otze</a>: 5*7*9*11*13*16*17*19=232792560<br />
An der Argumentation ändert das natürlich nichts.</p>
</blockquote>
<p>ich bin meine Punkte in HöMa nicht wert <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>
</blockquote>
<p>macht nix, campers rechnung stimmt auch nicht. <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="😃"
    /><br />
Die Zahl mag ja richtig sein, aber das produkt links enthält nur ungerade zahlen... da kann das ergebnis nicht gerade sein. <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>
</blockquote>
<p>16 ist bei mir ziemlich gerade</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490575</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 11 Apr 2008 19:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 20:11:05 GMT]]></title><description><![CDATA[<p><a href="http://projecteuler.com" rel="nofollow">projecteuler.com</a> ?</p>
<p>Kleiner Tipp für die Verallgemeinerung: Die kleinste Zahl, die durch 1 bis n teilbar ist, ist ggt(ggt(...ggt(n-2, ggt(n-1, n))...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1490590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490590</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 11 Apr 2008 20:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 21:05:57 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p><a href="http://projecteuler.com" rel="nofollow">projecteuler.com</a> ?</p>
<p>Kleiner Tipp für die Verallgemeinerung: Die kleinste Zahl, die durch 1 bis n teilbar ist, ist ggt(ggt(...ggt(n-2, ggt(n-1, n))...).</p>
</blockquote>
<p>hm.. sowas hab ich schon mal implementiert als ich die varargs in Java ausprobieren wollte <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>Bekomme das gleiche Ergebnis wie Don06 für n = 20. Hier der Quellcode (Java):</p>
<pre><code class="language-java">public class KGVTest {
	public static boolean isEven(int a) {
		return (a &amp; 1) == 0;
	}

	public static int computeGGT(int param) {
		return param;
	}

	public static int computeGGT(int a, int b) {
		int k = 0;
		while (isEven(a) &amp;&amp; isEven(b)) {
			a &gt;&gt;= 1;
			b &gt;&gt;= 1;
			++k;
		}
		int t;
		if (!isEven(a)) {
			t = -b;
		} else {
			t = a;
		}
		while (t != 0) {
			while (isEven(t)) {
				t &gt;&gt;= 1;
			}
			if (t &gt; 0) {
				a = t;
			} else {
				b = -t;
			}
			t = a - b;
		}
		return a &lt;&lt; k;
	}

	public static int computeGGT(int... params) {
		int ggt = computeGGT(params[0], params[1]);
		for(int i = 2; i &lt; params.length; i++) {
			ggt = computeGGT(ggt, params[i]);
		}
		return ggt;		
	}

	public static int computeKGV(int param) {
		return param;
	}

	public static int computeKGV(int a, int b) {
		return (a/computeGGT(a, b))*b;
	}

	public static int computeKGV(int... params) {
		int kgv = computeKGV(params[0], params[1]);
		for(int i = 2; i &lt; params.length; i++) {
			kgv = computeKGV(kgv, params[i]);
		}
		return kgv;		
	}

	public static void main(String[] args) {
		int[] params = new int[20];
		for(int i = 0; i &lt; params.length; i++) {
			params[i] = i+1;
		}
		System.out.println(computeKGV(params));		
	}	
}
</code></pre>
<p>edit: nochmal bissel optimiert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1490602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490602</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Fri, 11 Apr 2008 21:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion Overflow on Fri, 11 Apr 2008 21:29:40 GMT]]></title><description><![CDATA[<p>Bruteforce kommt auf campers Zahl:</p>
<pre><code class="language-cpp">unsigned int z = 20;
 unsigned int n = 1;

 while (1) {

  if ((z % n) != 0) {
   n = 0; z += 20;
  }

  n += 1; if (n &gt; 20) { break; }
 }
</code></pre>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1490613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1490613</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 11 Apr 2008 21:29:40 GMT</pubDate></item></channel></rss>