方案。尾递归?
下面提到的伪代码有任何尾递归版本吗?谢谢 !
(define (min list)
(cond
((null? list) '())
((null? (cdr list)) (car list))
(#t (let ((a (car list))
(b (min (cdr list))))
(if (< b a) b a)))))
any tail-recursive version for the below mentioned pseudocode ? Thanks !
(define (min list)
(cond
((null? list) '())
((null? (cdr list)) (car list))
(#t (let ((a (car list))
(b (min (cdr list))))
(if (< b a) b a)))))
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您应该阅读
fold
高阶函数< /a>.You should read up on the
fold
higher-order functions.定义一个辅助函数,它接受一个列表和迄今为止找到的最小元素(我们称之为 b)。如果列表为空,则应返回 b,否则如果列表头 (a) 小于 b,则应返回
(helper (cdr list) a)
,否则(助手(cdr 列表)b)
。现在我们可以将(min list)
定义为(helper (cdr list) (car list))
。Define a helper function that takes a list and the smallest element found so far (let's call it b). If the list is empty, it should return b, otherwise if the head of the list (a) is smaller than b than it should return
(helper (cdr list) a)
, otherwise(helper (cdr list) b)
. Now we can define(min list)
as(helper (cdr list) (car list))
.