Lineare Rekursion

Moin und frohe Weihnachten an alle,

nun zu meinem Problem, ich stehe brutal auf dem schlauch momentan. Ich bekomme einfach die folgende Aufgabe nicht gelöst -.-

Implementieren Sie eine rekursive Methode, die in einem Feld mit Feldtyp int das kleinste Ele- ment heraussucht und zurück gibt. Das zu durchsuchende Feld soll als Parameter Ihrer Methode übergeben werden. Die Methode kann weitere Parameter besitzen.

Die Lösung soll objekt-orientiert sein. Es muss sich um lineare Rekursion handeln. Es dürfen keine Schleifen verwendet werden.

Bevor Sie mit der Implementierung anfangen, überlegen Sie sich konzeptionell die rekursive Struktur des Problems, um dann eine Idee für einen rekursiven Algorithmus zu entwickeln.

Überprüfen Sie Ihre Implementierung mit einer JUnit-Testklasse.


einige Ideen oder Denkanstöße wären genial. Danke
 
Java:
public class LineareRekursion {
   
    private int min;

    public int kleinFinden(int[] zahlen, int n) {
        if(n == 1) {
            min = zahlen[0];
        } else {
            kleinFinden(zahlen, n-1);
            if(zahlen[n-1] < zahlen[n-2] && zahlen[n-1] < min) {
                min = zahlen[n-1];
            }
        }
        return min;   
    }
}

diese Lösung hatte ich relativ schnell nur mein Prof. war damit nicht wirklich zufrieden... er meinte es geht einfacher und meine variable min fand er auch nicht so dolle
 
Tach,
so kannst du es machen:
Java:
    public static void main(String[] args) {
        System.out.println(kleinFinden(new int[]{5, 4, 1, 2, 3}));
    }

    static int kleinFinden(int[] zahlen) {
        if (zahlen.length == 1) {
            return zahlen[0];
        }
        int[] b = new int[zahlen.length - 1];
        System.arraycopy(zahlen, 1, b, 0, b.length);
        return Math.min(zahlen[0], kleinFinden(b));
    }

das ist natürlich wegen 1 Parameter weg nicht so performance.
 
danke für die Hilfe derWissende aber Funktionen wie Math. darf ich leider nicht benutzen 😉 Danke für die verlinkung Flown, werde ich mir gleich angucken 🙂
 
aber Funktionen wie Math. darf ich leider nicht benutzen
Und du kannst diese Funktion nicht selber umschreiben? Das ist einfach nur ein if-/else-:
Java:
    public static void main(String[] args) {
        System.out.println(kleinFinden(new int[]{5, 4, 1, 2, 3}));
        System.out.println(kleinFinden(new LinkedList<>(Arrays.asList(5, 4, 1, 2, 3))));
        System.out.println(kleinFinden("54123"));
    }

    static int kleinFinden(int[] a) {
        if (a.length == 1) {
            return a[0];
        }
        int[] b = new int[a.length - 1];
        System.arraycopy(a, 1, b, 0, b.length);
        int c = kleinFinden(b);
        if (a[0] <= c) {
            return a[0];
        } else {
            return c;
        }
    }

    static int kleinFinden(LinkedList<Integer> list) {
        int a = list.getFirst();
        if (list.size() == 1) {
            return a;
        }
        list.removeFirst();
        int b = kleinFinden(list);
        if (a <= b) {
            return a;
        } else {
            return b;
        }
    }

    static int kleinFinden(String s) {
        int a = s.charAt(0) - '0';
        if (s.length() == 1) {
            return a;
        }
        int b = kleinFinden(s.substring(1));
        if (a <= b) {
            return a;
        } else {
            return b;
        }
    }

Nach der dir gegebenen Aufgabenstellung, gibt es keine anderen Möglichkeiten, das zu "realisieren". (Abgesehen von weiteren Parametern......)

Bearbeitung: .arraycopy() kannst du aber selber umschreiben, oder? Das sollte man zwar nich tun, stellt aber keine Herausforderung.
 
Soooo ich habs, danke für eure Hilfe 🙂 ich finds echt klasse dass ihr alle so hilfsbereit seid!

vll noch eine mini frage, wie teste ich eine IllegalArgumentException?
 
Zuletzt bearbeitet:

Zurück
Oben