1
han777 2 天前
《计算机程序的构造与解释》
|
2
wyx119911 2 天前
leetcode 刷几道二叉树的题?
|
3
coool 2 天前
基于 JavaScript 和 Python 的书:<递归算法与项目实战>
|
4
kapaseker 2 天前
递归有什么非要用的场景吗?其实这个没有非得学的必要
|
7
iOCZS 2 天前
递归有啥特别要学的吗?不过有个尾递归优化的东西。
|
8
iOCZS 2 天前
更多时候需要结合场景吧,譬如说深度优先遍历,回溯等。
|
9
mumbler 2 天前
科目二都没过,就上路了,你肯定上的不是正规驾校
|
10
dragondove 2 天前 1
初学的难主要还是缺乏可视化的手段吧,还有一个是用递归模拟迭代的多参数混乱。可以看下类似 https://dmytrobaida.github.io/recursion-viewer/ 的工具,然后自己写的时候可以打印点日志,打印的方式是递归方法入口先打印 indent (比如说是 2 个空格)* 递归深度(递归深度作为参数传入)然后方法名加各个参数信息。打印内容可能是类似下面这样
``` |fib(5) | |fib(4) | | |fib(3) | | | |fib(2) | | | |2 | | | |fib(1) | | | |1 | | |3 | | |fib(2) | | |2 | |5 | |fib(3) | | |fib(2) | | |2 | | |fib(1) | | |1 | |3 |8 ``` 这个的源码大概是这样: ```scala def fib(n: Int, depth: Int = 0): Int = println(s"""${"| " * depth}|fib($n)""") if n <= 2 then println(s"""${"| " * depth}|$n""") n else val r = fib(n - 1, depth + 1) + fib(n - 2, depth + 1) println(s"""${"| " * depth}|$r""") r val res = fib(5) ``` 当然,你也可以想办法把这个功能做成装饰器 |
11
amlee 2 天前
SICP 有一部分专门讲递归
|
12
levelworm 2 天前 via Android
还是跟着感兴趣的项目来吧,比如说写个 shadow casting 的算法啥的。
|
13
vance123 2 天前
6.009 最后几个项目
|
14
786375312123 2 天前
你上 leetcode 做几个 dfs 的题不就好了
|
16
nnegier OP @dragondove #10 这个方法很有用,可视化后对算法的稳定性会有更好的认识和认知
|
17
wudiiiii 2 天前
力扣刷二叉树 tag 的题,很有帮助。信我,我把二叉树 tag 都刷完了。
|
19
bugmakerxs 2 天前
理解了程序调用栈就理解了递归。
|
20
zczy999 2 天前 2
b 站看左程云,把他递归 dp 那一系列题刷一刷 你大概就懂递归啦 这玩意真得刷题 你光看看不懂也不能深入理解
|
21
airw 2 天前
递归是语法,不是算法。
函数内部调用函数自身,这一类函数调用的形式,被称为函数的递归。 理论上所有循环都可以用递归语法来写,但递归不一定能很容易的转化成循环。 要理解递归函数的执行顺序,可以用树的形式来思考。 |
22
YadongZhang 2 天前
|
23
FYFX 2 天前
学门函数式语言,然后做练习
|
24
edwardzcn98 2 天前
仅考虑书
稍微理解《 The Little Schemer 》 多点理解《 The Little Typer 》 深入理解《计算机程序的构造与解释》 SICP |
25
julyclyde 1 天前
@dragondove 没觉得有啥可视化的必要啊
这东西单靠想象就足够了 |
26
hello2090 1 天前 via iPhone
不是,这都得学嘛,不就是一个调用一个,一个调用一个嘛。只不过调用的是同一个函数
|
27
IwfWcf 1 天前
小学刚学写代码的时候确实觉得递归是遇到的第一个有点难理解的概念,当时觉得难理解的原因是当状态多了,在脑中尝试展开递归时就会觉得混乱。后来发现把握两个重点就很简单了,思考复杂度也比非递归要低
1.想好最底层的边界条件 2.写代码时只考虑当前这一层要怎么写,不要去思考之前一层的结果是怎样得到的 |
28
open9527 1 天前
把汉诺塔弄明白就差不多了
|
29
Foxkeh 1 天前
可以试试这个<<Hello 算法>>
https://www.hello-algo.com/ |
30
NoOneNoBody 1 天前
我和你刚好相反,好多时候第一想法是递归,我是比较容易理解递归的,就是“反复”调用自身+判断结束标记而已,可能经常写闭包函数(甚至嵌套的闭包),递归就是特殊的闭包函数,return self(...)
反而是想避免溢出时,跳离递归就怎么都想不到其他方案 |
32
wnpllrzodiac 1 天前
12345 全排列写一下
dfs 二叉树写一下。 递个龟 没啥难的。从递归改写成递推才比较难 |
34
acorngyl 1 天前
@zczy999 #33 B 站前的付费学员了。能把算法这个东西从深度和知识面讲清楚的,很少。他是用刷题的方式把常见“数据结构”和相关“算法”,都拆开,讲明白了。操作系统的内存管理,编程语言的基础类库,用的大部份原理,基本都涉及到了。
难度还好吧,基本都是通用场景的东西。竞赛题他比较抵触,比如,要求根据数据量或者数据集特性优化,拼 cpu 字长压 io 的东西。 |
35
iorilu 1 天前
第一步, 先把常见循环得算法改成递归
比如 1+2+...+100 , 正常都是循环实现, 但可改用递归 反正都可以改, 主要是熟悉下 然后可以实现汉诺塔这种, 递归明显更合适得算法 然后就是 2 叉树了 |
37
louzhichen 1 天前
|
38
shimanooo 1 天前
递归和数学归纳法是深度结合的. 不从这点出发的教材一定不是好教材.
|
39
Binwalker 1 天前 1
建议去学学 lambda 演算,系统性的学习递归,如何构造递归,Y 组合子之类的都有,推荐这本书《 introduction to functional programming through lambda calculus 》,不过只有英文版
|
40
saka1zd 1 天前 1
可以看这个 [看到递归就晕?带你理解递归的本质!] https://www.bilibili.com/video/BV1UD4y1Y769
|
43
baidishenjian 1 天前
把递归当成栈来思考就容易很多了
|
44
visper 1 天前
如果只是我们平时写代码的时候的递归,我还没有问的必要,想得出来就想得出来,基本上就是一个抽象公共子问题的问题。其他无非就是常用的模式去学一下。比如树的 DFS,BFS 这些。但是我感觉不是在问这一层级。
|
46
shaozelin030405 20 小时 35 分钟前
禁用所有循环,用递归来实现所有的循环就行了~
|