Ausführung gibt keinen Fehler an, Return wird aber nicht ausgegeben

NicknamePN

Mitglied
public static int binRecSearch (int[] field, int key){
int Anfang = 0;
int Ende = field.length -1;
return binRecSearch(field, key, Anfang, Ende);
}

public static int binRecSearch (int[] field, int key, int Anfang, int Ende){
while (Anfang<=Ende){
int Mitte = (Anfang+Ende)/2;
if (Mitte==key)
return Mitte;
else if (field[Mitte] > key)
binRecSearch(field, key, Anfang, Mitte-1);
else
binRecSearch(field, key, Mitte+1, Ende);
}
return -1;
}

public static void main(String[] args){
int [] array2 = new int[4];
array2[0]=2;
array2[1]=5;
array2[2]=6;
array2[3]=8;

System.out.println(binRecSearch(array2, 5));
}

Das Programm wird ohne Fehlermeldung ausgeführt, braucht aber extrem lange und zudem wird einfach nach erfolgreicher Ausführung nichst auf der Konsole ausgegeben
(ich versuche eine rekursive binär Suche zu programmieren)
 
Ihc glaube nicht, sonst würde es java ja nicht ausführen sondern irgendwann einen fehler geben. Außerdem wird in der if else entweder Anfang immer größer oder Ende immer kleiner.
 
public static int binRecSearch (int[] field, int key, int Anfang, int Ende){
int Mitte = (Anfang+Ende)/2;
if (Mitte==key)
return Mitte;
while (Anfang<=Ende){
if (field[Mitte] > key)
binRecSearch(field, key, Anfang, Mitte-1);
else
binRecSearch(field, key, Mitte+1, Ende);
}
return -1;
}

so funktioniert es aber auch nicht
 
Ja, ich bin gerade auch drauf gekommen, dass der Fehler unglaublich trivial ist. Die bedingung muss lauten
if (field[Mitte]==key)
return Mitte;
so funktioniert es ohne probleme.
Kann ich den thread irgendwie als abgeschlossen markieren?
Danke nochmal für die Hilfe 🙂
 
Funktionsfähig schaut es so aus
public static int binRecSearch (int[] field, int key){
int Anfang = 0;
int Ende = field.length -1;
return binRecSearch(field, key, Anfang, Ende);
}

public static int binRecSearch (int[] field, int key, int Anfang, int Ende){

int Mitte = (Anfang+Ende)/2;
if (field[Mitte]==key)
return Mitte;
else if (Anfang>=Ende)
return -1;
else if (field[Mitte] > key)
binRecSearch(field, key, Anfang, Mitte-1);
else if (field[Mitte] < key)
binRecSearch(field, key, Mitte+1, Ende);
return -1;
}
 
Ich bin mir ziemlich sicher habe es an 6 verschiedenen arrays ausprobiert, und es hat immer entweder den key in der Liste gefunden oder -1 wiedergegeben, falls er nicht verhanden war
 

Zurück
Oben