【发布时间】:2018-11-15 15:27:39
【问题描述】:
前言
我已经阅读了很多关于为什么更喜欢递归而不是迭代的文章,但我仍然没有看到任何解释何时更喜欢迭代而不是递归的问题。
动机
当然,我相信没有最好的工具可以解决所有问题。
比如勺子和叉子都是吃饭的工具,但是勺子更适合吃米饭,叉子更适合吃面条。
很明显,如果我说叉子(或勺子)是最好的吃饭工具,我会很狂热。
所以,它和递归或迭代一样,都是工具,各有优缺点。
但是,通过谷歌和 StackOverflow 搜索后,虽然我找到了很多关于为什么递归比迭代更具可读性的例子,但我仍然没有找到任何关于 何时迭代的例子比递归更具可读性。
因此,我试图找出迭代更易读的情况。就像古人如何意识到叉子比勺子更擅长处理面条一样。
预期答案
因此,我希望得到满足以下要求的答案:
- 说明迭代何时比递归更具可读性
- 在伪代码中给出一个算法示例(例如冒泡排序等),以证明在这种情况下迭代比递归更可读
注意
- 请注意,我不关心性能,我关心的是代码可读性。
- 因此,您可以使用任何命令式语言,但不能使用 Haskell(或其衍生物),因为它们不支持循环。
参考
【问题讨论】:
-
是否有您关注的特定语言?不同的语言可能对其中一种有不同的优化。
-
其实我并不关心是哪种语言,我想从理论上解释一下。
-
@WongJiaHau - 你是对的。它应该已经关闭了。我也投过那个票。
-
我的意思是说你的问题是“基于意见的”是没有人对递归与迭代的优雅程度进行任何测量。例如,我不知道有任何 fMRI 研究可以测量在查看递归代码与迭代代码时大脑的哪些区域(例如,快乐中心)被激发。我也不认为有研究可以测量两种编码方式时释放的多巴胺水平。没有这个,没有人可以客观地回答你的问题。只需使用您更喜欢或感觉更舒服的东西。
-
@WongJiaHau 哈哈,我没有意识到,我很抱歉。公平地说,我不确定这在堆栈溢出答案的空间中是否可以回答。我不确定它是否可以回答。优雅可能比可读性更接近你想要的。可读性取决于上下文:
[].slice.call(arguments)对每个在行业工作的 JavaScript 开发人员都很熟悉,但对其他人来说却相当不透明。而我认为当我们说某件事是优雅时,我们有更高程度的普遍认同:例如欧拉恒等式优雅,快速排序算法优雅等等。
标签: recursion functional-programming iteration procedural-programming