计算机界为什么推崇递归思维?

2019-06-12 08:10:47 +08:00
 africwildman

各种算法书都会夸一夸递归之美,但递归性能差,容易爆栈,唯一的好处就是人的智商理解起来容易一点,写出来的代码看着更甜(所谓优雅)。我没感觉递归有多好,不如循环,不值得推崇。

7947 次点击
所在节点    算法
46 条回复
momocraft
2019-06-12 08:13:28 +08:00
數學歸納法是基礎之一, 不過計算能力上只和循環等價的
javlib
2019-06-12 08:15:52 +08:00
尾递归可以转化为迭代,而且递归更容易表达“人“的思路。
africwildman
2019-06-12 08:17:00 +08:00
@javlib 尾递归是循环的包装。
Akiyu
2019-06-12 08:27:00 +08:00
也算不上推崇吧
递归就是一种思维方式, 一种规律
当面临一些难以追踪和管理的数据结构时, 例如俄罗斯套娃一样的问题, 递归尤其重要
使用递归处理这些问题, 你只需要观察得出局部的规律, 然后以递归形式写出来, 难度和代码简洁程序都大有裨益

至于不如循环, 这个看你自己了. 循环的话, 所有的数据管理都得自己来做
比如汉诺塔, 在未得出封闭解的情况下. 用循环来实现, 那想想就头疼...
PALELESS
2019-06-12 08:31:54 +08:00
没必要纠结什么包装什么, 如果因为尾递归是循环的包装就直接写循环, 那么为什么不去写机器码而是用高级语言? 都是为了便于理解?
dugive
2019-06-12 08:37:15 +08:00
马克
africwildman
2019-06-12 08:39:25 +08:00
@Akiyu 看来是我写的少,没有这些感触。
passerbytiny
2019-06-12 08:40:43 +08:00
你自己都已经把原因说出来了——人的智商理解起来容易一点。虽然你看不起人的智商,但是你改变不了可读性比性能重要的事实。另外,递归对应的是数学上的迭代。
secsilm
2019-06-12 08:45:04 +08:00
从哪看的说递归写法比较优雅的?
1a0ma0
2019-06-12 08:52:39 +08:00
我就是单纯觉的有意思,你看看那个 lisp 的符号表达式就是递归的。
chrisliu1314
2019-06-12 08:56:56 +08:00
递归可以将一个问题分解为子问题,从而解决问题。性能的问题,可以通过加缓存,避免重复计算。
q8164305
2019-06-12 08:59:25 +08:00
递归,更接近数学思维,数学归纳法,所以很优雅
est
2019-06-12 09:09:08 +08:00
这个问题不适宜直接回答。其实可问一个类似的问题:

为什么物理界这么推崇对称?

其实他们背后都是同一个答案。
yushi17
2019-06-12 09:13:45 +08:00
能用循环不用递归。真的有书推崇写递归吗?可能只是用递归思想分析问题吧。能转化成循环的要转化
heyjei
2019-06-12 09:18:56 +08:00
对于那种变量类型只有 val 没有 var 的编程语言来说,递归差不多是解决问题唯一的写法
acehow
2019-06-12 09:22:21 +08:00
啥叫不如循环,复杂度一样的啊,还更易读。
VD
2019-06-12 09:23:14 +08:00
草稿用递归,优化时转循环
FromNowToNow
2019-06-12 09:24:20 +08:00
代码简短优雅、符合人的思维习惯。崇尚递归就像崇尚用动态规划一样,体现 coder 的思维和代码能力
smallpython
2019-06-12 09:29:19 +08:00
我的理解是递归可以显得 coder 更牛逼
zhila
2019-06-12 09:33:21 +08:00
beautiful,各种意义上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/573012

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX