3

我在 Scheme 中有这个迭代过程。(其实我真的不知道它到底是个什么样的过程)

(define (contains-double? lst)
 (cond
  ((or (null? lst) (null? (cdr lst))) #f)
  ((eq? (car lst) (cadr lst)) #t)
  (else (contains-double? (cdr lst)))))

它检查是否有 2 个相同的数字彼此相邻。例如:

(contains-double? '(1 2 3 3 3 5 2))    => #t
(contains-double? '(1 2 3 5 3 2))      => #f
(contains-double? '(1 2 3 2 2))        => #t

我可以使这个过程递归吗?

提前致谢

4

1 回答 1

2

问题中的过程是递归的(contains-double?正在调用自身),但是它生成的过程是迭代的,因为该过程是用尾递归风格编写的——这意味着在过程从递归调用返回后,除了 return 之外,没有什么可做的它的价值。

此过程生成的过程可以通过删除尾递归来进行递归:

(define (contains-double? lst)
  (if (or (empty? lst) (empty? (rest lst)))
      #f
      (or (contains-double? (rest lst))
          (= (first lst) (second lst)))))
于 2012-11-10T16:30:23.183 回答