【发布时间】:2021-12-01 15:23:28
【问题描述】:
我正在尝试为峰值编写一个函数,该函数使用列表来生成一个包含原始列表的所有峰值的子列表。前任。 (peaks (cons 1 (cons 6 (cons 4 (cons 5 empty))))) 应该产生 (cons 6 (cons 5 empty))
我的答案似乎是正确的,但我认为我在某个地方搞砸了,因为它不是正确的答案。我使用递归做了一个辅助函数来确定列表中的最大数量,然后将其子代入另一个递归函数以创建一个包含最大数量的子列表。
关于我在哪里搞砸的任何建议?我们刚刚开始学习递归,这是唯一让我感到困惑的问题。
(cond
[(empty? (rest lon)) (first lon)]
[else (max (first lon) (greatest (rest lon)))]))
(define (peaks lon)
(cond
[(empty? (rest lon)) lon]
[(equal? (first lon) (greatest lon)) (cons (first lon) (peaks (rest lon)))]
[else (peaks (rest lon))]))```
【问题讨论】:
-
这需要递归吗?您要做的就是为每个元素保存它,如果它大于它之前的数字,并且大于它之后的数字。您可能需要递归来迭代列表,我不记得球拍是否允许您在没有递归的情况下迭代列表。您的基本案例应该处理第一个和最后一个元素,第一个元素只需要大于它之后的元素,最后一个数字也需要这样做。还有水水水
-
@SatbirKira 列表是一种递归数据结构,因此处理它的递归过程是最自然的解决方案。
标签: recursion functional-programming racket