我正在为即将到来的考试解决一些问题,我需要一些关于这个 Lisp 函数的帮助。我在 CLISP 工作。
我必须找到列表中仅由奇数组成的最长递减序列。
例子:
(longest '(13 9 3 7 4 7 5 3 2 8 15 11 9 7 3))
应该返回:
(15 11 9 7 3)
唯一的强制性要求是该函数必须递归实现:)
对于连续的子序列,这很容易。只是我不会口齿不清,所以我必须用语言解释它。
- 调用递归助手,带有附加参数 a) 迄今为止找到的最长的 b) 该子序列的长度 c) 当前子序列 d) 其长度。最初这些是 () 0 () 0。
- 虽然列表的头部是偶数,但在尾部重复出现。
- Start
current
遇到第一个奇数时,尾部重复出现。
- 如果 head 为偶数,或者 head 不小于前一个元素,则当前序列停止。将其长度与之前找到的最长序列进行比较。如果当前值更长,则它成为新的最长的,否则忘记当前值。转到2。
当到达列表末尾时,两个记住的列表中较长的一个就是答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)