0

下面提到的伪代码的任何尾递归版本?谢谢 !

(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)))))
4

5 回答 5

2

您应该阅读fold高阶函数

于 2010-04-24T14:50:48.077 回答
1

定义一个辅助函数,它接受一个列表和到目前为止找到的最小元素(我们称之为 b)。如果列表为空,则应返回 b,否则如果列表的头部 (a) 小于 b,则应返回(helper (cdr list) a),否则返回(helper (cdr list) b)。现在我们可以定义(min list)(helper (cdr list) (car list))

于 2010-04-24T14:49:37.023 回答
1
 (define (min list)
  (let imin ((l (cdr list))
         (m (car list)))
    (cond
     ((null? l) m)
     (else
      (let ((a (car l)))
        (imin (cdr l)
              (if (< a m) a m)))))))
于 2010-04-24T14:52:07.543 回答
0
(define (min ns)
  (let loop ( (ns-left ns) (min-so-far maxint) )
    (if (null? ns-left)
      min-so-far
      (loop
        (cdr ns-left)
        (if (< (car ns-left) min-so-far)
          (car ns-left)
          min-so-far )))))
于 2010-04-25T05:36:17.293 回答
0
(define (min list)
   (min-helper list #f))

(define (min-helper list min-so-far)
   (if (null? list) 
       min-so-far
       (let ((m (car list)))
            (if (eq? min-so-far #f)
                (set! min-so-far m))
            (if (< m min-so-far)
                (min-helper (cdr list) m)
                (min-helper (cdr list) min-so-far)))))
于 2010-04-25T16:41:27.980 回答