我做了以下但是它返回错了,似乎无法找出原因,你们可以帮助我的错误或错过的东西感到困惑。
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;
}
答案 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)))
等定义的实现