递归地返回列表t中的最小元素

时间:2016-11-25 00:56:00

标签: java list recursion

我做了以下但是它返回错了,似乎无法找出原因,你们可以帮助我的错误或错过的东西感到困惑。

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;
          }

2 个答案:

答案 0 :(得分:3)

无需创建临时变量。相反,您应该返回(如果少于两个元素)第一个元素。否则,返回第一个元素的最小值和递归调用子列表的结果。像,

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())));
}

,在Java 8+中没有递归,你可以做类似的事情

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

答案 1 :(得分:2)

你没有递归地调用它,改为:

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

这是 minimumElementOf(t)= minimumOf(head(t),minimumElementOf(tail(t)))

等定义的实现