<?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 abbrechen]]></title><description><![CDATA[<p>Ich stehe vor einem kleinem Designproblem in Zusammenhang mit Rekursion. Folgender Code:</p>
<pre><code class="language-cpp">classMember = 0;

someFooBarFunc(){

  //some Queue operations

  for ( ... )
    if (foo == SOME_VALUE){
      classMember = ...;
      return;
    }

    //...
    someFooBarFunc();
  }

}
</code></pre>
<p>Ich befinde mich in einer beliebigen Rekursionstiefe. Wie kann ich nun einfach mittendrin abbrechen? Das Problem ist, dass die Rekursion in einer Schleife aufgerufen wird. Dadurch bringt ein einfaches return nichts. Dadurch verläßt er nur die eine Rekursionsstufe und macht in der nächsthöheren in der Schleife munter weiter.</p>
<p>Ein Lösungsansatz wär folgender:</p>
<pre><code class="language-cpp">resultFound = false;
classMember = 0;

someFooBarFunc(){
  if (resultFound)
    return;

  //some Queue operations

  for ( ... )
    if (foo == SOME_VALUE){
      classMember = ...;
      resultFound = true;
      return;
    }

    //...
    someFooBarFunc();
  }

}
</code></pre>
<p>Ich setzte einfach ein Flag. Ist dieses Flag gesetzt, breche ich jede Funktion am Anfang gleich ab.</p>
<p>Gib es elegantere Lösungen für dieses Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124520/rekursion-abbrechen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 02:30:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124520.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Oct 2005 10:11:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 10:11:30 GMT]]></title><description><![CDATA[<p>Ich stehe vor einem kleinem Designproblem in Zusammenhang mit Rekursion. Folgender Code:</p>
<pre><code class="language-cpp">classMember = 0;

someFooBarFunc(){

  //some Queue operations

  for ( ... )
    if (foo == SOME_VALUE){
      classMember = ...;
      return;
    }

    //...
    someFooBarFunc();
  }

}
</code></pre>
<p>Ich befinde mich in einer beliebigen Rekursionstiefe. Wie kann ich nun einfach mittendrin abbrechen? Das Problem ist, dass die Rekursion in einer Schleife aufgerufen wird. Dadurch bringt ein einfaches return nichts. Dadurch verläßt er nur die eine Rekursionsstufe und macht in der nächsthöheren in der Schleife munter weiter.</p>
<p>Ein Lösungsansatz wär folgender:</p>
<pre><code class="language-cpp">resultFound = false;
classMember = 0;

someFooBarFunc(){
  if (resultFound)
    return;

  //some Queue operations

  for ( ... )
    if (foo == SOME_VALUE){
      classMember = ...;
      resultFound = true;
      return;
    }

    //...
    someFooBarFunc();
  }

}
</code></pre>
<p>Ich setzte einfach ein Flag. Ist dieses Flag gesetzt, breche ich jede Funktion am Anfang gleich ab.</p>
<p>Gib es elegantere Lösungen für dieses Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902604</guid><dc:creator><![CDATA[Untitled]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 10:17:53 GMT]]></title><description><![CDATA[<p>brauchst du an der Stelle überhaupt eine Rekursion? Ich würde (so wie ich deinen Codefetzen sehe) eher eine Schleife verwenden:</p>
<pre><code class="language-cpp">void someFunc()
{
  while(true)
  {
    //...
    if(foo==SOME_VALUE)
    {
      //write output
      return
    }
    //...
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/902609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902609</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:17:53 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 10:53:07 GMT]]></title><description><![CDATA[<p>Ich versuche es mal das Problem etwas besser zu beschreiben.</p>
<p>Es handelt sich dabei um einen Graphen, in dem ich einen Knoten finden will. Dazu muss ich für jeden Knoten jeden Weg ausprobieren(Breitensuche).</p>
<p>In einer Schleife gehe ich für den aktuellen Knoten alle mit ihm verbundenen Knoten durch. Handelt es sich bei dem aktuellen Knoten in der Schleife nicht um einen Treffer, muss ich für diesen Knoten wieder den selben Schritt ausführen(hier kommt die Rekurion ins Spiel).</p>
<p>Sobald ich den gesuchten Knoten gefunden habe, breche ich die Rekursion ab.</p>
<p>Hoffe diese Erklärung ist etwas besser. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/902638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902638</guid><dc:creator><![CDATA[Untitled]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:53:07 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 11:10:55 GMT]]></title><description><![CDATA[<p>Untitled schrieb:</p>
<blockquote>
<p>Gib es elegantere Lösungen für dieses Problem?</p>
</blockquote>
<p>Durchaus, versuch für deine Rekursion ein iteratives Äquivalent zu finden. Dieses kannst du auf den einzelnen Ebenen besser kontrollieren. break, continue, return und selbst goto helfen dir dabei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902657</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 28 Oct 2005 11:10:55 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 13:03:36 GMT]]></title><description><![CDATA[<p>eine weitere alternative wäre, exceptions zu benutzen. der erste funktionsaufruf muss dann in einen try-block. ob dass günstiger als eine iterative lösung ist, kann ich hier nicht beurteilen; es hat jedenfalls den vorteil, dass es weniger änderungen am code verlangt, falls dieser bereits exception-sicher ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902787</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 28 Oct 2005 13:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 13:28:54 GMT]]></title><description><![CDATA[<blockquote>
<p>...und selbst goto helfen dir dabei</p>
</blockquote>
<p>Na dann doch lieber rekursion</p>
<p>Eigentlich ist doch der zweite vorschlag von dir nicht so schlecht, vielleicht resultFound als return wert zurückgeben. Und wenn Du das sauber machst, dann brauchst du das erste</p>
<pre><code class="language-cpp">if (resultFound)
    return;
</code></pre>
<p>auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902805</guid><dc:creator><![CDATA[123456789]]></dc:creator><pubDate>Fri, 28 Oct 2005 13:28:54 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 15:01:50 GMT]]></title><description><![CDATA[<p>Untitled schrieb:</p>
<blockquote>
<p>Dazu muss ich für jeden Knoten jeden Weg ausprobieren(Breitensuche).</p>
</blockquote>
<p>Breitensuche sucht ja normalerweise nach dem kürzesten Weg und nicht - wie die Tiefensuche - nach e i n e m Weg. Breitensuche prüft erst alle Wege der Länge 1, dann alle der Länge 2, etc. und wird normalerweise mit ner Queue implementiert.</p>
<p>Nid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902855</guid><dc:creator><![CDATA[Nidhogger]]></dc:creator><pubDate>Fri, 28 Oct 2005 15:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 15:16:30 GMT]]></title><description><![CDATA[<p>Breitensuche sucht nicht nach Wegen und Threadsteller auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902871</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Fri, 28 Oct 2005 15:16:30 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 15:38:14 GMT]]></title><description><![CDATA[<p>Apollon schrieb:</p>
<blockquote>
<p>Breitensuche sucht nicht nach Wegen und Threadsteller auch nicht.</p>
</blockquote>
<p>Breitensuche wird zur Suche des kürzesten Wegs/Pfads benutzt. Auch wenn hier keine Wege gesucht werden, ist die übliche Implementierung einer Breitensuche mit Queue und nicht Rekursion.</p>
<p>Nid</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902885</guid><dc:creator><![CDATA[Nidhogger]]></dc:creator><pubDate>Fri, 28 Oct 2005 15:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 16:59:30 GMT]]></title><description><![CDATA[<p>Ersteinmal vielen Dank an alle! <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><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10531">@Nidhogger</a>: Ich wollte zuerst auch die Breitensuche mit Hilfe einer Queue implementieren, hatte dabei aber keine Möglichkeit gefunden wie ich alle Knoten von Start bis Ziel der Reihenfolge nach speichern kann, ohne dafür extra eine weitere Liste zu benutzen oder die Konten zu verändern. Welche Möglichkeiten übersehe ich?</p>
<p>Mein Pseudocode würde dafür so aussehen:</p>
<pre><code>füge Startknoten in Queue
while (Queue ist nicht leer)
  hole Element aus Queue
  for (alle Kanten von aktl. Knoten)
    if (Kante noch nicht besucht)
       Füge Kante in Queue ein
    end if
  end for
end while
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/902948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902948</guid><dc:creator><![CDATA[Untitled]]></dc:creator><pubDate>Fri, 28 Oct 2005 16:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 17:36:04 GMT]]></title><description><![CDATA[<p>Was noch wichtig ist, dass dein Query nach FIFO funktioniert, weil sonst es keine Breitensuche wird, sondern einen Tiefensuche oder irgendein Mischmasch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902970</guid><dc:creator><![CDATA[imhotep]]></dc:creator><pubDate>Fri, 28 Oct 2005 17:36:04 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 18:39:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">classMember = 0;

bool someFooBarFunc(){ 

	for (...) {
		if (foo == SOME_VALUE) {
			classMember = ...; 
			return true;
		}
		if (someFooBarFunc()) {
			return true;
		}
	}

	return false;
}
</code></pre>
<p>Ist vielleicht nicht so besonders chic, aber so müsste es doch gehen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903013</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Fri, 28 Oct 2005 18:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 18:56:17 GMT]]></title><description><![CDATA[<p>Untitled schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10531">@Nidhogger</a>: Ich wollte zuerst auch die Breitensuche mit Hilfe einer Queue implementieren, hatte dabei aber keine Möglichkeit gefunden wie ich alle Knoten von Start bis Ziel der Reihenfolge nach speichern kann, ohne dafür extra eine weitere Liste zu benutzen oder die Konten zu verändern. Welche Möglichkeiten übersehe ich?</p>
</blockquote>
<p>Du müsstest ja in jeden Knoten sowieso ein Attribut haben, mit dem du festhalten kannst, ob du einen Knoten bereits besucht hast. Wenn du dieses Attribut so verwendest, dass du dort abspeicherst, wie weit der Knoten vom Ursprungsknoten entfernt sind, dann brauchst du dich, nachdem du den gesuchten Knoten gefunden hast, einfach nur rückwärts an diesen Zahlen zurückzuhangeln.</p>
<p>Nid.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903042</guid><dc:creator><![CDATA[Nidhogger]]></dc:creator><pubDate>Fri, 28 Oct 2005 18:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Fri, 28 Oct 2005 22:00:20 GMT]]></title><description><![CDATA[<p>123456789 schrieb:</p>
<blockquote>
<p>Na dann doch lieber rekursion</p>
</blockquote>
<p>Wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903123</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 28 Oct 2005 22:00:20 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 11:44:15 GMT]]></title><description><![CDATA[<p>Na weils übersichtlicher ist als dieses goto gespringe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903314</guid><dc:creator><![CDATA[123456789]]></dc:creator><pubDate>Sat, 29 Oct 2005 11:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 11:56:09 GMT]]></title><description><![CDATA[<p>Brauchst du für dein Problem wirklich diese Graphen-Struktur? (besonders sind Graphen nicht gerade die ideale Grundstruktur für eine Suche)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903319</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 29 Oct 2005 11:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 13:41:40 GMT]]></title><description><![CDATA[<p>123456789 schrieb:</p>
<blockquote>
<p>Na weils übersichtlicher ist als dieses goto gespringe.</p>
</blockquote>
<p>Uninteressant. Rekursion mag zwar übersichtlicher erscheinen, ist aber von der Logik her oftmals viel schwerer zu verstehen. Ausserdem sagt niemmand, dass du etliche goto's verwenden sollst, idR gibt es bessere Möglichkeiten. Wer aber glaubt, es führt kein Weg an goto in seinem Code vorbei, dann soll er's auch nutzen. Besser als irgendwelche Dummys einzuführen ist es allemal. Dabei zu beachten ist nur, niemals nach oben springen, denn sonst kann man tatsächlich schnell den Überblick verlieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903328</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sat, 29 Oct 2005 13:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 12:05:50 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Na weils übersichtlicher ist als dieses goto gespringe.</p>
</blockquote>
</blockquote>
<p>Wenn du schon zitierst, dann achte bitte darauf, wen <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="😉"
    /> (ich störe mich zwar nicht daran, daß mein Name genannt wird - aber bitte im richtigen Zusammenhang)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903331</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 29 Oct 2005 12:05:50 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 12:29:04 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>groovemaster schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Na weils übersichtlicher ist als dieses goto gespringe.</p>
</blockquote>
</blockquote>
<p>Wenn du schon zitierst, dann achte bitte darauf, wen <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="😉"
    /> (ich störe mich zwar nicht daran, daß mein Name genannt wird - aber bitte im richtigen Zusammenhang)</p>
</blockquote>
<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>
<p>groovemaster schrieb:</p>
<blockquote>
<p>Uninteressant. Rekursion mag zwar übersichtlicher erscheinen, ist aber von der Logik her oftmals viel schwerer zu verstehen. Ausserdem sagt niemmand, dass du etliche goto's verwenden sollst, idR gibt es bessere Möglichkeiten. Wer aber glaubt, es führt kein Weg an goto in seinem Code vorbei, dann soll er's auch nutzen. Besser als irgendwelche Dummys einzuführen ist es allemal. Dabei zu beachten ist nur, niemals nach oben springen, denn sonst kann man tatsächlich schnell den Überblick verlieren.</p>
</blockquote>
<p>Also ich hab noch keinen Code (außer Assembler) gesehen, bei dem man ein goto nicht vermeiden hätte können. Man kann natürlich jede Rekursion mit hilfe eines Stacks in ein iteratives prog. umwandeln, aber obs dann übersichtilcher ist? Man sollte natürlich nur da Rekursion verwenden wo es wirklich besser ist oder sein muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903352</guid><dc:creator><![CDATA[1234567789]]></dc:creator><pubDate>Sat, 29 Oct 2005 12:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 12:44:15 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>Wer aber glaubt, es führt kein Weg an goto in seinem Code vorbei, dann soll er's auch nutzen.</p>
</blockquote>
<p>Oder er soll sich wohl strukturierten Code ausdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903361</guid><dc:creator><![CDATA[imhotep]]></dc:creator><pubDate>Sat, 29 Oct 2005 12:44:15 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 14:03:32 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du schon zitierst, dann achte bitte darauf, wen <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>Solltest vielleicht nicht soviel posten. <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 />
Lass mich mal kurz nachrechnen, 12 Tage dabei, fast 400 Beiträge, dh 33 Beiträge pro Tag. Respekt!</p>
<p>1234567789 schrieb:</p>
<blockquote>
<p>Also ich hab noch keinen Code (außer Assembler) gesehen, bei dem man ein goto nicht vermeiden hätte können.</p>
</blockquote>
<p>Natürlich kannst du immer goto vermeiden, die Frage ist nur, zu welchen Kosten. Versteh mich nicht falsch, ich bin kein Verfechter von goto. Nur ist es unsinnig sich stur gegen die Verwendung von goto zu stellen, auch wenn der aussergewöhnliche Fall eintreten sollte, dass es mal die einfachste Lösung darstellt. Es geht auch nicht darum, seinen Code möglichst so aufzubauen, dass man goto erst gar nicht braucht. Das versteht sich eigentlich von selbst.</p>
<p>1234567789 schrieb:</p>
<blockquote>
<p>Also ich hab noch keinen Code (außer Assembler) gesehen, bei dem man ein goto nicht vermeiden hätte können.</p>
</blockquote>
<p>Was allerdings nicht für die Allgemeinheit zutreffen muss.</p>
<p>1234567789 schrieb:</p>
<blockquote>
<p>Man kann natürlich jede Rekursion mit hilfe eines Stacks in ein iteratives prog. umwandeln</p>
</blockquote>
<p>Kann sein, dafür ist ein Stack aber gar nicht notwendig.</p>
<p>1234567789 schrieb:</p>
<blockquote>
<p>aber obs dann übersichtilcher ist?</p>
</blockquote>
<p>Wie bereits gesagt, bei solchen Sachen geht es in erster Linie aber nicht um Übersichtlichkeit, sondern um Codeverständnis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903410</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sat, 29 Oct 2005 14:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Sat, 29 Oct 2005 21:03:50 GMT]]></title><description><![CDATA[<p>So wie ich das sehe, sucht dein Algorithmus sehr lange nach etwas, was es nicht gibt, bzw. findet es sehr sehr oft.</p>
<p>In etwa so koennte eine Loesung aussehen.</p>
<pre><code class="language-cpp">void findNode(Node* start, Node* found, int id)
{
    if (start-&gt;id == id) {
        found = start;
        return;
    }

    start-&gt;visit();

    for (int i = 0; i &lt; successors.size(); ++i) {
        if (!successor[i]-&gt;visited())
            findNode(successor[i], found, id);
    }
}
</code></pre>
<p>Dabei ist die erste Abbruchbedingung recht &quot;weak&quot;. Es kann passieren (wird ganz sicher), dass er trotzdem alle Knoten besucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903609</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Sat, 29 Oct 2005 21:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to Rekursion abbrechen on Tue, 01 Nov 2005 08:22:06 GMT]]></title><description><![CDATA[<p>groovemaster schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du schon zitierst, dann achte bitte darauf, wen <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>Solltest vielleicht nicht soviel posten. <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 />
Lass mich mal kurz nachrechnen, 12 Tage dabei, fast 400 Beiträge, dh 33 Beiträge pro Tag. Respekt!</p>
</blockquote>
<p>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="🙂"
    /> (*grml* warum gibt's hier keinen errötenden Smilie?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905438</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 01 Nov 2005 08:22:06 GMT</pubDate></item></channel></rss>