<?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[int maximum(int arr[], int i), Rekursion]]></title><description><![CDATA[<p>Hab grad von nem Kollegen eine kleine Aufgabe bekommen (sollte mit Java fürs Studium umgesetzt werden) und hab dafür mal ne kleine Funktion geschrieben die in Java wunderbar funtkioniert aber in C++ ein paar Probleme verursacht.</p>
<p>Hier erst einmal die Aufgabe:</p>
<blockquote>
<p>1 - Bestimmung des Maximums<br />
Entwickeln Sie eine rekursive Methode int maximum( int[] arr, int i ), die für ein Feld arr das Maximum im<br />
Bereich von arr[0] bis arr[i] mit 0&lt;=i&lt;arr.length bestimmt und zurückgibt.<br />
Verzichten Sie bei der Lösung der Aufgabe völlig auf die Benutzung von for- oder while-Schleifen!</p>
</blockquote>
<p>Also einfach nur den größten Wert im Array zwischen 0 und i ausgeben.</p>
<p>Und hier mal meine Funktion:</p>
<pre><code>#include &lt;iostream&gt;

int maximum(int arr[], int i)
{
	if(i==0) return arr[0];
	return std::max(arr[i], maximum(arr, --i));
}

int main()
{
	int arr[] = {1, 6, 3, 7};
	std::cout &lt;&lt; maximum(arr, 3) &lt;&lt; std::endl;
	//std::cout &lt;&lt; arr[4] &lt;&lt; std::endl;
}
</code></pre>
<p>Nun gibt er bei der zahl 3 als zweiten Parameter die 6 aus (wo er in Java die 7 ausgibt) und bei maximum(arr, 4) erst die 7 obwohl das eigentlich ja &quot;index out of bounds&quot; ist.</p>
<p>Jemand ne Ahnung wieso bei maximum(arr, 3) 6 und nicht 7 returned wird und wieso man auf arr[4] in der funktion zugreifen kann (und das richtige ergebnis ausgibt xD) während das in der main nicht funktioniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322198/int-maximum-int-arr-int-i-rekursion</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Jul 2026 08:07:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322198.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Dec 2013 21:01:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to int maximum(int arr[], int i), Rekursion on Tue, 10 Dec 2013 21:01:35 GMT]]></title><description><![CDATA[<p>Hab grad von nem Kollegen eine kleine Aufgabe bekommen (sollte mit Java fürs Studium umgesetzt werden) und hab dafür mal ne kleine Funktion geschrieben die in Java wunderbar funtkioniert aber in C++ ein paar Probleme verursacht.</p>
<p>Hier erst einmal die Aufgabe:</p>
<blockquote>
<p>1 - Bestimmung des Maximums<br />
Entwickeln Sie eine rekursive Methode int maximum( int[] arr, int i ), die für ein Feld arr das Maximum im<br />
Bereich von arr[0] bis arr[i] mit 0&lt;=i&lt;arr.length bestimmt und zurückgibt.<br />
Verzichten Sie bei der Lösung der Aufgabe völlig auf die Benutzung von for- oder while-Schleifen!</p>
</blockquote>
<p>Also einfach nur den größten Wert im Array zwischen 0 und i ausgeben.</p>
<p>Und hier mal meine Funktion:</p>
<pre><code>#include &lt;iostream&gt;

int maximum(int arr[], int i)
{
	if(i==0) return arr[0];
	return std::max(arr[i], maximum(arr, --i));
}

int main()
{
	int arr[] = {1, 6, 3, 7};
	std::cout &lt;&lt; maximum(arr, 3) &lt;&lt; std::endl;
	//std::cout &lt;&lt; arr[4] &lt;&lt; std::endl;
}
</code></pre>
<p>Nun gibt er bei der zahl 3 als zweiten Parameter die 6 aus (wo er in Java die 7 ausgibt) und bei maximum(arr, 4) erst die 7 obwohl das eigentlich ja &quot;index out of bounds&quot; ist.</p>
<p>Jemand ne Ahnung wieso bei maximum(arr, 3) 6 und nicht 7 returned wird und wieso man auf arr[4] in der funktion zugreifen kann (und das richtige ergebnis ausgibt xD) während das in der main nicht funktioniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371043</guid><dc:creator><![CDATA[Epitaph]]></dc:creator><pubDate>Tue, 10 Dec 2013 21:01:35 GMT</pubDate></item><item><title><![CDATA[Reply to int maximum(int arr[], int i), Rekursion on Tue, 10 Dec 2013 21:10:29 GMT]]></title><description><![CDATA[<p>Nun, dein Aufruf zu std::max ist problematisch.<br />
In C++ ist es undefiniert, in welcher Reihenfolge die Ausdrücke für Funktionsargumente ausgewertet werden, da du i im Argumentausrduck (?) veränderst, führt das zu Problemen.<br />
Für i=3 kann std::max bspw. mit arr[3], maximum(arr, 2) oder arr[2], maximum(arr, 2) aufgerufen werden. Verwende - 1 anstatt -- um das zu beheben.<br />
Dass arr[4] klappt ist reiner Zufall. Es ist nicht definiert und meistens wird dort Speicher gelesen/geschrieben, der dem Programm nicht gehört. Das führt dann zu einem sog. Segmentation Fault (Windows-Fehlermeldung: Dieses Programm funktioniert nicht mehr.) und das Programm crasht (bzw. wird vom OS gekillt).<br />
In deinem Fall steht an der Speicheradresse zufälligerweise eine 7.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371045</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 10 Dec 2013 21:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to int maximum(int arr[], int i), Rekursion on Tue, 10 Dec 2013 21:12:59 GMT]]></title><description><![CDATA[<p>Jo super danke <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="😉"
    /><br />
Wär ich glaub ich nie drauf gekommen aber nu bin ich ja für die nächsten male gewappnet^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371046</guid><dc:creator><![CDATA[Epitaph]]></dc:creator><pubDate>Tue, 10 Dec 2013 21:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to int maximum(int arr[], int i), Rekursion on Tue, 10 Dec 2013 21:13:08 GMT]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
#include &lt;algorithm&gt;
template&lt;typename InputIteratorType&gt;
int Maximum(InputIteratorType Begin, std::size_t Length)
{
	if(Length &lt;= 1)
	{
		return *Begin;
	}
	return std::max(*Begin, Maximum(++Begin, --Length));
}
int main()
{
	int arr[] = {1, 6, 3, 7};
	std::cout &lt;&lt; Maximum(arr, 3) &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2371047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371047</guid><dc:creator><![CDATA[asdfasdf]]></dc:creator><pubDate>Tue, 10 Dec 2013 21:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to int maximum(int arr[], int i), Rekursion on Tue, 10 Dec 2013 21:14:00 GMT]]></title><description><![CDATA[<p>oh ups fail, vergesst das da oben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2371048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2371048</guid><dc:creator><![CDATA[asdfasdf]]></dc:creator><pubDate>Tue, 10 Dec 2013 21:14:00 GMT</pubDate></item></channel></rss>