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

标签 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)))))

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

(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/

相关文章:

Java 字符递归

java - 检查该方法是否已使用该输入执行的方法

C:向 child 发送信号导致无限循环

Scheme中的图编程

scheme - 编写可移植方案代码。除了 R5RS 本身之外还有什么 "standard"吗?

c - 如何让我的代码在特定协调下找到解决方案?

Facebook 示例拼图 : Towers of Hanoi

c - 当线程释放它的资源

android - 在 Android 中杀死根进程

scheme - SublimeREPL 窗口的 MIT-Scheme