Recursion 我能让这个迭代过程在scheme中递归吗?

Recursion 我能让这个迭代过程在scheme中递归吗?,recursion,process,scheme,procedure,iteration,Recursion,Process,Scheme,Procedure,Iteration,我在Scheme中有这个迭代过程。(事实上,我真的不知道这是一个什么样的过程) 它检查是否有两个相同的数字相邻。 例如: (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 我可以使这个过程递归吗 提前感谢问题中的过程是递归的(包含double?正在调用自身),

我在Scheme中有这个迭代过程。(事实上,我真的不知道这是一个什么样的过程)

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

(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
我可以使这个过程递归吗


提前感谢

问题中的过程是递归的(
包含double?
正在调用自身),但它生成的过程是迭代的,因为过程是以尾部递归样式编写的-这意味着在过程从递归调用返回后,除了返回其值之外,没有什么要做的

通过删除尾部递归,可以使此过程生成的过程具有递归性:

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

您的代码仍然是尾部递归的。;-)您可以通过交换
的两个分支使其非尾部递归:这将使其变成右折叠,而不是当前的左折叠。@ChrisJester-Young谢谢,修复了它。由于短路评估,我怀疑
是否算作尾部递归
(define (contains-double? lst)
  (if (or (empty? lst) (empty? (rest lst)))
      #f
      (or (contains-double? (rest lst))
          (= (first lst) (second lst)))))