Rekursiv Minimum eines Int Feldes[Array] herausfinden(Java)

Status
Für weitere Antworten geschlossen.

kralex68

Lieutenant
Registriert
Juni 2008
Beiträge
787
Ich möchte gerne das Minimum eines Int Feldes rekursiv herausfinden.
Für das Maximum gibt es folgenden Code
Code:
public static int maximum(int[] arr, int i)
    {
        if ( i>arr.length)
        {
            return 0;
        }
        else
        {
            if ( i ==0)
            {
                return arr[0];
            }
            else
            {
                if ( arr[i]>=maximum(arr,i-1))
                {
                    return arr[i];
                }
                else
                {
                    return arr[i-1];
                }
            }
        }
        
        
    }

Für das Minimum habe ich alles beibehalten, allerdings diese Stelle umgedreht
Code:
if ( arr[i]>=maximum(arr,i-1))
Aus >= das hier gemacht: <=
Die Methode funktionierte in einigen Fällen, allerdings kommt es bei folgendem Feld
{1,2,3,4,5}
immer eine 4 raus. Die Zahl 4 wird mitgenommen, obwohl 1 rauskommen soll.

Könnt ihr mir helfen?
 
Zeiche dir doch mal einen Baum auf oder schreibe dir auf einem Zettel die Einzelnen Aufrufe bzw. die Aufrufstruktur auf.
Ungefähr so: http://www.saar.de/~awa/images/rek16.gif

Wenn du damit nicht weiter kommst, verrate ich dir gerne, wo du im Code Hand anlegen solltest. Weil das so nach Schul- oder Uniprogrammieraufgabe aussieht bekommst du keine direkte Lösung von mir. Ich helfe dir aber gerne, wenn du mit o.g. Tipp nicht weiter kommst.
 
das maximum scheint auch nicht richtig zu funktionieren:

int[] in = new int[]{4,1,5,3,2};

System.out.println(maximum(in,4));

liefert 3 zurück.


und wenn i == arr.length ist, gibt es eine indexOutOfBoundsException
 
kralex68 schrieb:
Ich möchte gerne das Minimum eines Int Feldes rekursiv herausfinden.
Für das Maximum gibt es folgenden Code
Code:
public static int maximum(int[] arr, int i)
    {
        if ( i>arr.length)
        {
            return 0;
        }
        else
        {
            if ( i ==0)
            {
                return arr[0];
            }
            else
            {
                if ( arr[i]>=maximum(arr,i-1))
                {
                    return arr[i];
                }
                else
                {
                    return arr[i-1];
                }
            }
        }
        
        
    }

Für das Minimum habe ich alles beibehalten, allerdings diese Stelle umgedreht
Code:
if ( arr[i]>=maximum(arr,i-1))
Aus >= das hier gemacht: <=
Die Methode funktionierte in einigen Fällen, allerdings kommt es bei folgendem Feld
{1,2,3,4,5}
immer eine 4 raus. Die Zahl 4 wird mitgenommen, obwohl 1 rauskommen soll.

Könnt ihr mir helfen?

Was ist denn dein Aufruf für Maximum?
 
striker159 schrieb:
das maximum scheint auch nicht richtig zu funktionieren:

int[] in = new int[]{4,1,5,3,2};

System.out.println(maximum(in,4));

liefert 3 zurück.

ist ja klar.
er schaut, ob der letzte wert des arrays das max ist: -> if ( arr>=maximum(arr,i-1))
wenn ja, festlegung dieses wertes als max
wenn nein, festlegung des vorherigen wertes als max -> return arr[i-1] //falsch
das ist der fehler, liefert immer den vorletzten wert im array.
daher die 3 in deinem beispiel (bzw die 4 im ausgangspost)
richtig wäre, weiter zu suchen: return maximum(arr,i-1); //korregiert

beim minimum wird es analog sein.

und wenn i == arr.length ist, gibt es eine indexOutOfBoundsException
dafür erstes if in if ( i>=arr.length) ändern
 
Zuletzt bearbeitet: (korrektur)
Meine ursprüngliche Aufgabe ist es mit der Methode int maximum(int[] arr, int i) in dem Feld von arr[0] bis arr nach dem maximalen Element rekursiv
zu suchen.
Kann mir jemand einen Tipp geben, wie ich es lösen könnte?
 
ändere zeile 3 und 21 wie beschrieben und es sollte klappen.
schon ausprobiert?
 
Es wurde doch oben detailliert erklärt was an deiner Lösung nicht stimmt!?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben