算法的“递归”有比较好的学习资源推荐吗?

90 天前
 nnegier
可能自己移动端开发内存限制栈溢出的原因,所以很少用递归多用队列循环,导致我在递归这块不太熟悉,最近在看书,里面代码有比较多的递归用法,递归我会是会,由外到里,再从里到外,但是不算很熟悉
4318 次点击
所在节点    程序员
46 条回复
airw
89 天前
递归是语法,不是算法。

函数内部调用函数自身,这一类函数调用的形式,被称为函数的递归。

理论上所有循环都可以用递归语法来写,但递归不一定能很容易的转化成循环。

要理解递归函数的执行顺序,可以用树的形式来思考。
YadongZhang
89 天前
FYFX
89 天前
学门函数式语言,然后做练习
edwardzcn98
89 天前
仅考虑书
稍微理解《 The Little Schemer 》
多点理解《 The Little Typer 》
深入理解《计算机程序的构造与解释》 SICP
julyclyde
89 天前
@dragondove 没觉得有啥可视化的必要啊
这东西单靠想象就足够了
hello2090
89 天前
不是,这都得学嘛,不就是一个调用一个,一个调用一个嘛。只不过调用的是同一个函数
IwfWcf
89 天前
小学刚学写代码的时候确实觉得递归是遇到的第一个有点难理解的概念,当时觉得难理解的原因是当状态多了,在脑中尝试展开递归时就会觉得混乱。后来发现把握两个重点就很简单了,思考复杂度也比非递归要低

1.想好最底层的边界条件
2.写代码时只考虑当前这一层要怎么写,不要去思考之前一层的结果是怎样得到的
open9527
89 天前
把汉诺塔弄明白就差不多了
Foxkeh
89 天前
可以试试这个<<Hello 算法>>
https://www.hello-algo.com/
NoOneNoBody
89 天前
我和你刚好相反,好多时候第一想法是递归,我是比较容易理解递归的,就是“反复”调用自身+判断结束标记而已,可能经常写闭包函数(甚至嵌套的闭包),递归就是特殊的闭包函数,return self(...)
反而是想避免溢出时,跳离递归就怎么都想不到其他方案
acorngyl
89 天前
@zczy999 #20 看见 dp 就跑过来 说左程云了。结果来晚了。
wnpllrzodiac
89 天前
12345 全排列写一下
dfs 二叉树写一下。
递个龟 没啥难的。从递归改写成递推才比较难
zczy999
89 天前
@acorngyl 哈哈你也看左神 他讲的确实好 就是题目选的都挺难的
acorngyl
89 天前
@zczy999 #33 B 站前的付费学员了。能把算法这个东西从深度和知识面讲清楚的,很少。他是用刷题的方式把常见“数据结构”和相关“算法”,都拆开,讲明白了。操作系统的内存管理,编程语言的基础类库,用的大部份原理,基本都涉及到了。
难度还好吧,基本都是通用场景的东西。竞赛题他比较抵触,比如,要求根据数据量或者数据集特性优化,拼 cpu 字长压 io 的东西。
iorilu
89 天前
第一步, 先把常见循环得算法改成递归

比如 1+2+...+100 , 正常都是循环实现, 但可改用递归

反正都可以改, 主要是熟悉下

然后可以实现汉诺塔这种, 递归明显更合适得算法

然后就是 2 叉树了
xiandao7997
89 天前
louzhichen
89 天前
shimanooo
89 天前
递归和数学归纳法是深度结合的. 不从这点出发的教材一定不是好教材.
Binwalker
89 天前
建议去学学 lambda 演算,系统性的学习递归,如何构造递归,Y 组合子之类的都有,推荐这本书《 introduction to functional programming through lambda calculus 》,不过只有英文版
saka1zd
89 天前
可以看这个 [看到递归就晕?带你理解递归的本质!] https://www.bilibili.com/video/BV1UD4y1Y769

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

https://tanronggui.xyz/t/1097577

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

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

© 2021 V2EX