algorithm - 这个递归函数是迭代的吗?

标签 algorithm recursion scheme

我正在观看 sicp 讲座,在视频 1b 中,sussman 将算法 1 称为迭代。他说方法2是递归的。据我了解,两者都是递归算法。我怎样才能最好地想到方法1?作为迭代递归算法?

https://www.youtube.com/watch?v=dlbMuv-jix8

方法1 - 时间复杂度为o(x),空间复杂度为o(1)

 (define (+ x y)
        (if (= x 0)
            y
            (+ (-1+ x) (1+ y))))

方法2 - 时间补数为o(x),空间补数为o(x)

(define (+ x y)
    (if (= x 0)
        y
        (1+ (+ (-1+ x) y))))

最佳答案

您的第一个示例是尾递归,因此是迭代的,第二个示例会增加堆栈,但不是。

在 SICP 视频中,他们将尾递归过程称为迭代。他们倾向于将非迭代过程称为递归,即使递归是Scheme 中唯一的循环机制。 (像 do 这样的东西只是尾递归过程调用的语法糖。) 与尾递归过程相反的过程没有一个好名字。

尽管如此,Sussman 既是《Scheme》的作者之一,又是《SICP》一书的作者之一,因此在所有奇才中他是最伟大的。该视频来自 80 年代,当时的报道是 R3RS。即使他们使用的语言是旧版本的方案,它与当今最常用的方案报告 R5RS 相差不远。

关于algorithm - 这个递归函数是迭代的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23770409/

相关文章:

php - 递归嵌套对象

java - 使用递归和回溯找到所有可能的多米诺骨牌链

algorithm - K-means 和顺序 K-means 的结果相同吗?

algorithm - 为什么单链表中的删除运行时间被认为是常数 O(1)?

javascript - javascript: 递归函数在循环多次时崩溃

lisp - Racket 中的管道字符有什么作用?

graph - 如何从方案中的图中删除节点?

algorithm - 查找第一个元素不小于第二个元素的向量对

algorithm - 图像比较快速 GPU 算法找到未匹配

scheme - .vimrc 中 Scheme 的条件选项