递归属于算法范畴吗

2019-09-30 13:17:01 +08:00
 unforgiven

如果说递归属于算法范畴,那么二叉树的遍历等如果使用递归的方式来解决仿佛都可以算在递归算法里面,这样一来貌似迭代也算是算法,因为递归可以实现的迭代都可以

5918 次点击
所在节点    算法
38 条回复
unforgiven
2019-09-30 16:41:50 +08:00
@passerbytiny 你说的没错,递归就是迭代的一种特殊实现,但是把叫不出名字的递归实现的算法统统叫做递归算法这样是不是有点过分了
unforgiven
2019-09-30 16:43:04 +08:00
@lance6716 lisp?
passerbytiny
2019-09-30 16:49:55 +08:00
@unforgiven #18 递归跟迭代是包含关系,不是实现—接口 /定义关系,别搞混了。
ayase252
2019-09-30 16:51:39 +08:00
递归是在分治法思想指导下的一种实现方法。
lvybupt
2019-09-30 16:57:13 +08:00
@unforgiven 两种说法都对。或者说,只是一个习惯性的称呼而已,只要交流的人不产出歧义就行。用大类的算法名来形容具体的算法确实容易引起歧义,但是并不能算错。

我在给你举个例子,更典型更直观。
穷举法就是最朴素最基本的算法。如果你放到实现搜索这个功能里面,顺序查找法就是典型的穷举算法。但是如果你直接说穷举法,就可能是倒着找,或者按照其他的某一规则穷举,还能否被称为顺序查找法就有待商榷了。但是你叫它某个查找算法的穷举实现或者用穷举算法查找其实本质上没有任何区别。

另外,我提醒一下,纠结于它叫一种实现方式还是叫算法,其实是没有意义的。算法本来就是可以相关关联嵌套甚至是彼此实现构成的。
比如我们在设计一个加密算法的时候,第一步可能需要系统生成随机数。加密算法叫做算法。至于我是叫这个随机数生成过程,我可以调用任意的满足要求的其他算法,是叫它伪随机函数的实现还是叫它伪随机生成算法,其实是没有意义的。
Nasei
2019-09-30 17:02:48 +08:00
递归是算法的结构,一般遵循分治法的思想,而且你别看不上迭代啊,暴力求解也是算法的一种
lvybupt
2019-09-30 17:10:39 +08:00
@unforgiven 我看了一下楼里的各种回复。
其实命名一种具体的算法里面,名字中应该包含的是解决目标中最关键点的地方才是最合适的。
解决某个 xx 问题的某某算法,用递归实现了,直接叫递归算法确实不妥。
但是计算斐波纳契数列的那基本算法,就叫递归算法。
unforgiven
2019-09-30 17:12:59 +08:00
@passerbytiny 本质上都是 goto 啊
unforgiven
2019-09-30 17:15:18 +08:00
@lvybupt 我觉得叫递推更合适一些,毕竟那个基本算法还可以用迭代来写
unforgiven
2019-09-30 17:18:08 +08:00
@unforgiven 叫做回溯也行,但是叫递归真的有歧义
Fangfang2019
2019-09-30 17:31:19 +08:00
递归是一种表达方式,不叫算法
leavic
2019-09-30 17:35:27 +08:00
算法应该是可以以固定的步骤解决问题,递归,要几步?我觉得按这个来说不算算法。
kljsandjb
2019-09-30 17:40:07 +08:00
肯定算啊
ayase252
2019-09-30 17:58:10 +08:00
@leavic 递归也有递归中止条件,有限步肯定能算出来
bumz
2019-09-30 19:19:03 +08:00
递归递推迭代都是算法设计思想
也可以用来对算法进行分类

树的遍历是按功能分类

但他们都不是特指某个具体的算法

Dijkstra, Tarjan 这些才是具体的算法
keith1126
2019-09-30 23:29:20 +08:00
“对于程序员,递归是如同呼吸一般自然的本能。”

就好比呼吸一样,虽然确实有一定的运作方式,也涉及到了人体系统的协调工作,但这算一种体育运动吗?
unforgiven
2019-10-01 00:05:08 +08:00
@bumz 我认为算法是对问题的解决方法的描述,递归这种貌似任何算法都可以实现出递归版本
unforgiven
2019-10-01 00:06:23 +08:00
@keith1126 而且算法导论里很少出现递归算法这个词,大多数出现的是递归式

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

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

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

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

© 2021 V2EX