标准ML:迭代与递归

时间:2015-06-14 16:03:22

标签: recursion sml ml

我正在通过ML阅读工作程序员,并且对作者在迭代和递归之间的区别感到有些困惑。我的理解是"递归"只是指一个自称的函数。任何不递归的函数都是迭代的(迭代算法通常涉及某种循环)。

然而,在本书中,作者会说类似于"幸运的是,明显的递归解决方案是迭代的。"因此,我对这些术语的理解与作者使用它们的方式完全不同。

有人可以澄清我误解这些条款的地方吗?

谢谢, bclayman

1 个答案:

答案 0 :(得分:2)

迭代意味着你可以用循环来表达它。但是,一般来说,循环只是递归的特例。例如,在SML中,循环

while A do B

字面上定义为递归定义的语法缩写

let fun loop() = if A then (B; loop()) else () in loop() end

这就是为什么“迭代”不被理解为与“递归”相反的原因,而是作为一种特殊情况:一些递归定义是迭代的,而另一些则不是。更具体地说,它是线性递归的特例,其中递归定义最多只调用一次。