为什么递归比迭代更受欢迎?
迭代比递归更高效,对吗? 那么为什么有些人认为递归比迭代更好(用他们的话来说更优雅)? 我真的不明白为什么像Haskell这样的语言不允许迭代并鼓励递归? 鼓励那些性能不佳的东西并不是很荒谬(当更多的高性能选项,即递归可用时)也是如此荒谬? 请澄清一下。 谢谢。
迭代比递归更高效,对吗?
不必要。 这个概念来自许多C语言,其中调用一个函数,递归或不是,有一个很大的开销,并为每个调用创建一个新的堆栈。
对于很多语言而言,情况并非如此,递归与迭代版本相比,性能相当或更高。 现在,甚至有些C编译器会将某些递归构造重写为迭代版本,或者重复使用堆栈帧进行尾递归调用。
尝试递归迭代地实现深度优先搜索,并告诉我哪一个给了你更容易的时间。 或合并排序。 对于很多问题,都需要明确维护自己的堆栈,而不是将数据留在函数堆栈上。
我不能跟Haskell说话,因为我从来没有使用它,但是这是为了解决标题中提出的问题的更一般的部分。
Haskell不允许迭代,因为迭代涉及可变状态(索引)。
链接地址: http://www.djcxy.com/p/86753.html