我在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
我可以递归这个过程吗?
提前致谢
答案 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)))))