我正在通过ML阅读工作程序员,并且对作者在迭代和递归之间的区别感到有些困惑。我的理解是"递归"只是指一个自称的函数。任何不递归的函数都是迭代的(迭代算法通常涉及某种循环)。
然而,在本书中,作者会说类似于"幸运的是,明显的递归解决方案是迭代的。"因此,我对这些术语的理解与作者使用它们的方式完全不同。
有人可以澄清我误解这些条款的地方吗?
谢谢, bclayman
答案 0 :(得分:2)
迭代意味着你可以用循环来表达它。但是,一般来说,循环只是递归的特例。例如,在SML中,循环
while A do B
字面上定义为递归定义的语法缩写
let fun loop() = if A then (B; loop()) else () in loop() end
这就是为什么“迭代”不被理解为与“递归”相反的原因,而是作为一种特殊情况:一些递归定义是迭代的,而另一些则不是。更具体地说,它是线性递归的特例,其中递归定义最多只调用一次。