小编典典

Lisp中最长的递减序列

algorithm

我正在为即将参加的考试解决一些问题,并且需要有关Lisp功能的一些帮助。我在CLISP中工作。我必须找到最长的递减序列,该序列仅由列表中的奇数组成。例:

(longest '(13 9 3 7 4 7 5 3 2 8 15 11 9 7 3))

应该返回:

(15 11 9 7 3)

唯一的强制性要求是必须递归实现该功能:)


阅读 210

收藏
2020-07-28

共1个答案

小编典典

使用连续的子序列,这很容易。除了我不轻描淡写,所以我必须用语言解释它。

  1. 调用递归帮助器,并带有其他参数a)迄今为止发现的最长b)该长度c)当前子序列d)其长度。最初,这些是()0()0。
  2. 当列表的首部是偶数时,请在尾部重复。
  3. current遇到的第一个奇数开始,然后在尾巴上重复出现。
  4. 如果head为偶数,或head不小于前一个元素,则当前序列停止。将其长度与先前找到的最长序列进行比较。如果电流更长,它将成为新的最长电流,否则会忘记电流。转到2。

当到达列表的末尾时,答案是两个记住的列表中较长的一个。

2020-07-28