Die linke Rekursion ist ok, jedoch liefert dir die rechte eine Endlosrekursion.
Kurzes Beispiel:
Du hast 5 Elemente in deinem Array und rufst jetzt deine getSmallestElement-Methode auf (getSmallestElement(array, 0, 4) )
Die linke Rekursion ruft nun getSmallestElement(array, 0, 2) auf und die rechte Rekursion ruft getSmallestElement(array, 2, 4) auf.
Ich ignorier jetzt mal die linke Rekursion und geh weiter auf die rechte ein:
Diese wird erneut getSmallestElement(array, 2, 4) aufrufen (Da sich ende/2 zu 2 auswertet).
Usw..
Du darfst hier also nicht annehmen, dass der Start immer 0 ist.