【问题标题】:Returns the minimum element in the list t , recursively递归返回列表 t 中的最小元素
【发布时间】:2016-11-25 00:56:00
【问题描述】:

我执行了以下操作,但它返回错误,似乎无法找出原因,请各位大神帮忙,我的错误在哪里,或者丢失的东西很困惑。

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

【问题讨论】:

  • 你没有从方法中调用任何递归调用。

标签: java list recursion


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你没有递归调用,改成:

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

    这是像 minimumElementOf(t) = minimumOf( head(t) , minimumElementOf(tail(t)) )这样的定义的实现

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2017-07-22
      • 2016-08-09
      • 2014-01-18
      相关资源
      最近更新 更多