给定一个整数列表a,使用递归返回一个新列表,该递归包含a的所有正元素

时间:2016-01-17 20:09:17

标签: java list recursion

  

给定一个整数列表a,返回一个新列表,其中包含使用递归的a的所有正元素。元素应以与a中相同的相对顺序出现在结果中。即[2, 3, -5, 8, -2] ==> [2, 3, 8]

public static List positives(List a) {
    if (a.isEmpty())
        return List.empty();
    if (a.getHead() > 0)
        return  positives(a.getTail()); 
    else
    return List.cons(0, a);
}

2 个答案:

答案 0 :(得分:1)

您尚未发布List的代码,但这就是算法的样子:

  • 如果列表为空,则返回一个空列表(List.empty())。
  • 如果head元素为正(a.getHead() > 0),请保留它并返回该元素的列表以及尾部的正元素(使用List.cons)。
  • 如果head元素为负数,则将其删除,然后从尾部返回正元素列表。

在你当前的代码中,第一个点是正确完成的,但另外两个是正确的:在head元素为正的情况下,你忽略它(当你应该这样做时,如果head元素是负数而不是)。

这应该足以让您更正代码。

答案 1 :(得分:1)

这看起来很像LISP。

而不是

return List.cons(0, a);

使用

return List.cons(a.getHead(), positives(a.getTail());