我在Scheme中有这个迭代过程。 (其实我也不知道到底是一个什么样的过程)
(define (contains-double? lst)
(cond
((or (null? lst) (null? (cdr lst))) #f)
((eq? (car lst) (cadr lst)) #t)
(else (contains-double? (cdr lst)))))
它检查是否有两个相邻的相同数字。 例如:
(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
我可以让这个过程递归吗?
提前致谢
最佳答案
问题中的过程是递归的(contains-double?
正在调用自身),但它生成的过程是迭代的,因为该过程是以尾递归风格编写的 - 这意味着存在过程从递归调用返回后不执行任何操作,除了返回其值。
此过程生成的过程可以通过删除尾递归来实现递归:
(define (contains-double? lst)
(if (or (empty? lst) (empty? (rest lst)))
#f
(or (contains-double? (rest lst))
(= (first lst) (second lst)))))
关于recursion - 我可以在方案中使这个迭代过程递归吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13323753/