【问题标题】:Given a list of ints a, return a new list using recursion which contains all positive elements of a给定一个整数 a 的列表,使用递归返回一个新列表,其中包含 a 的所有正元素
【发布时间】:2016-01-17 20:09:16
【问题描述】:

给定一个整数列表 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);
}

【问题讨论】:

  • 您面临的问题是什么?你的问题是什么(要求!=问题)。
  • 我是递归和列表的新手,这个小问题让我很困惑。当我测试它时,代码返回混合结果。希望有任何帮助告诉我我哪里出错了。谢谢。
  • 您的代码无法为我编译。你的List是什么?
  • List只是一个类,它定义了一个名为List的递归类型,并提供了构造函数和getter方法。

标签: java list recursion


【解决方案1】:

您还没有发布List 的代码,但算法应该是这样的:

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

在您当前的代码中,第一点已正确完成,但其他两点不正确:在 head 元素为正的情况下,您将忽略它(当 head 元素为负时您应该这样做)。

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

【讨论】:

  • 非常感谢 Tunaki 的帮助,我现在就试试看!
【解决方案2】:

这看起来很像 LISP。

代替

return List.cons(0, a);

使用

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

【讨论】:

  • 谢谢,在将我的代码从 "if (a.getHead() > 0)" 更改为 if (a.getHead()
  • @SteveChalmers 是否有效,您知道为什么吗?
  • 是的,谢谢。我想我知道它是如何工作的,但我对递归还不熟悉,所以还不适应它。我会把它写在纸上,试图理解每一步。再次感谢。
  • @SteveChalmers 如果您使用的是 eclipse,您可以在每次返回时设置一个断点并每次检查列表。
猜你喜欢
  • 2022-11-14
  • 2020-02-02
  • 1970-01-01
  • 2019-07-29
  • 2021-04-21
  • 2020-03-27
  • 2011-09-25
  • 2020-10-19
  • 1970-01-01
相关资源
最近更新 更多