2016-11-25 4 views
1

Ich habe folgendes getan, aber es ist falsch und kann nicht herausfinden, warum, könnten Sie bitte helfen, wo der Fehler ist oder die Sache fehlt, ist verwirrt.Gibt das Minimum Element in der Liste t, rekursiv

public static int min(List<Integer> t) { 
     int minimum; 
      if (t.size() == 1) { 
      return t.get(0); 
      } else { 
       // index -- first index 
       int index = t.get(0); 
       List<Integer> u = t.subList(1, t.size()); 
       minimum = Math.min(index, u.get(0));// index- the first index 

       } 
      return minimum; 
      } 
+1

Sie haben keinen rekursiven Aufruf der Methode aufgerufen. –

Antwort

3

Sie müssen keine temporären Variablen erstellen. Stattdessen sollten Sie (wenn es weniger als zwei Elemente gibt) das erste Element zurückgeben. Andernfalls geben Sie das Minimum des ersten Elements und das Ergebnis des rekursiven Aufrufs mit der Unterliste zurück. Wie,

public static int min(List<Integer> t) { 
    if (t.size() < 2) { 
     return t.get(0); 
    } 
    return Math.min(t.get(0), min(t.subList(1, t.size()))); 
} 

Oder, in Java 8+ und ohne Rekursion, könnten Sie so etwas wie

return t.stream().mapToInt(Integer::intValue).min().getAsInt(); 
2

Sie nicht nennen es rekursiv, ändern tun:

minimum = Math.min(index, min(u)); 

Dies ist die Implementierung einer Definition wie minimumElementOf (t) = MinimumOf (Kopf (t), MinimumElementOf (Schwanz (t)))

Verwandte Themen