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

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

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

7969 次点击
所在节点    算法
46 条回复
jmc891205
2019-06-12 09:35:56 +08:00
担心爆栈就自己搞个栈 这不算啥大问题
codecrash
2019-06-12 09:53:26 +08:00
美感
ech0x
2019-06-12 09:55:56 +08:00
因为美,简洁的美,抽象的美。
lambda 表达式依赖递归就可以构建出与图灵机等价的计算模型。
曾经人们觉得一个编程语言里没有 goto 是无法写程序的,正如现在人们都觉得没有循环语句是没法写程序的,但 Dijkstra 证明了 Goto 对于程序语言来说不是必须的,也正如这世界上是有还「活着」的语言是没有循环语句的( Haskell 就是一个极好的例子)。
所以说学一门函数式编程语言能让你的眼界开阔。
testeststs
2019-06-12 10:08:38 +08:00
软件工程为什么先要系统设计,然后详细设计,然后编码和调试?
编程的时候为什么先写接口,框架搭完了,然后再写详细实现?
GjriFeu
2019-06-12 10:08:45 +08:00
代码是写给人看的
annoymous
2019-06-12 10:11:41 +08:00
递归便于思考 或者说更容易发现规律与解法
CSM
2019-06-12 10:23:22 +08:00
递归处理树这些本身就递归的数据结构上有天然的优势,还有就是在函数式语言大量使用了。

另外 @annoymous 你 ID 有 typo🐶
limbo0
2019-06-12 10:23:26 +08:00
因为现代的计算机不是设计成函数式的
annoymous
2019-06-12 10:26:09 +08:00
@CSM #27 正确的已经被人注册了
runze
2019-06-12 10:31:26 +08:00
递归更符合数学思维,
爆栈是语言的问题,
递归和循环各自有最适合的场景,
两者都能用的时候未必一定要用递归。
congeec
2019-06-12 10:32:47 +08:00
@secsilm Haskell 我用的不多,目前写起来很优雅。
mcfog
2019-06-12 10:41:58 +08:00
这里陷阱在于推崇是个人对一个东西主观的认可和赞誉,“递归思维”即使 LZ 写成思维,也还是一个解决问题的方式方法,无法被推崇,或者说推崇方式方法本身并不是一种科学的思维方式

我觉得“推崇”递归是不对的,但我也完全不赞同楼主的观点,原因如上
southsala
2019-06-12 10:55:39 +08:00
同意 22l 的观点,不管什么“思维”,都是针对某些问题的,没有银弹“思维”
pkookp8
2019-06-12 11:07:20 +08:00
1.简洁
2.简洁
3.简洁
4.不要过早优化
MoRun
2019-06-12 11:36:37 +08:00
爆栈是语言问题
递归是思维方式
递归可以写成迭代的形式
很多函数式编程语言没有循环
watzds
2019-06-12 12:01:46 +08:00
递归只是个表达方式,谁真到处写递归啊?
thedog
2019-06-12 12:11:59 +08:00
用逻辑学的理论来说,自我复用是智能的基础之一。递归是自我复用的程序表达
wdv2ly
2019-06-12 12:20:16 +08:00
你说的唯一的好处带来的价值已经远超过所谓的坏处降低的价值了,所以就应该推崇。
GeruzoniAnsasu
2019-06-12 12:49:37 +08:00
推荐文章:永恒的金色对角线
http://mindhacks.cn/2006/10/15/cantor-godel-turing-an-eternal-golden-diagonal/

递归不是思维方法和设计模式,递归是数学和集合论的通俗化。你站到了很多年前第一个可递归程序设计者对面——那些计算机专家和数学家的身旁。可以说已经达到了很高的境界。
shadownet
2019-06-12 13:16:00 +08:00
你有更好的办法?

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

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

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

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

© 2021 V2EX