我可以在方案中递归这个迭代过程吗?

时间:2012-11-10 16:25:18

标签: recursion process scheme procedure iteration

我在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

我可以递归这个过程吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

问题中的过程是递归的(contains-double?正在调用自身),但它生成的过程是迭代的,因为过程是以尾递归的方式编写的 - 这意味着在过程之后没有任何事情可做从递归调用返回,除了返回其值。

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

(define (contains-double? lst)
  (if (or (empty? lst) (empty? (rest lst)))
      #f
      (or (contains-double? (rest lst))
          (= (first lst) (second lst)))))