标准 ML:迭代与递归
Standard ML: Iterative vs. Recursive
我正在通读 ML for the Working Programmer,对作者在迭代和递归之间的区别感到有点困惑。我的理解是 "recursive" 只是指一个调用自身的函数。任何非递归的函数都是迭代的(其中迭代算法通常涉及某种循环)。
然而,在这本书中,作者会这样说"luckily the obvious recursive solution is iterative." 所以我对这些术语的理解肯定与作者使用它们的方式不同。
有人可以澄清我对这些术语的误解吗?
谢谢,
克莱曼
迭代意味着你可以用循环来表达它。但是,一般来说,循环只是递归的一种特例。例如,在 SML 中,循环
while A do B
字面定义为递归定义的语法缩写
let fun loop() = if A then (B; loop()) else () in loop() end
这就是为什么 "iterative" 不被理解为 "recursive" 的对立面,而是作为一种特殊情况:一些递归定义是迭代的,而另一些则不是。更具体地说,它是线性递归的特例,其中递归定义最多被调用一次。
我正在通读 ML for the Working Programmer,对作者在迭代和递归之间的区别感到有点困惑。我的理解是 "recursive" 只是指一个调用自身的函数。任何非递归的函数都是迭代的(其中迭代算法通常涉及某种循环)。
然而,在这本书中,作者会这样说"luckily the obvious recursive solution is iterative." 所以我对这些术语的理解肯定与作者使用它们的方式不同。
有人可以澄清我对这些术语的误解吗?
谢谢, 克莱曼
迭代意味着你可以用循环来表达它。但是,一般来说,循环只是递归的一种特例。例如,在 SML 中,循环
while A do B
字面定义为递归定义的语法缩写
let fun loop() = if A then (B; loop()) else () in loop() end
这就是为什么 "iterative" 不被理解为 "recursive" 的对立面,而是作为一种特殊情况:一些递归定义是迭代的,而另一些则不是。更具体地说,它是线性递归的特例,其中递归定义最多被调用一次。