算法的“递归”有比较好的学习资源推荐吗?
可能自己移动端开发内存限制栈溢出的原因,所以很少用递归多用队列循环,导致我在递归这块不太熟悉,最近在看书,里面代码有比较多的递归用法,递归我会是会,由外到里,再从里到外,但是不算很熟悉
《计算机程序的构造与解释》
leetcode 刷几道二叉树的题?
基于 JavaScript 和 Python 的书:<递归算法与项目实战>
递归有什么非要用的场景吗?其实这个没有非得学的必要
这个还是必须要学,用不用是一回事
oi-wiki.org/basic/divide-and-conquer/
递归有啥特别要学的吗?不过有个尾递归优化的东西。
更多时候需要结合场景吧,譬如说深度优先遍历,回溯等。
科目二都没过,就上路了,你肯定上的不是正规驾校
初学的难主要还是缺乏可视化的手段吧,还有一个是用递归模拟迭代的多参数混乱。可以看下类似 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
这个的源码大概是这样:
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)
当然,你也可以想办法把这个功能做成装饰器
SICP 有一部分专门讲递归
还是跟着感兴趣的项目来吧,比如说写个 shadow casting 的算法啥的。
6.009 最后几个项目
你上 leetcode 做几个 dfs 的题不就好了
#9 回你一句,你以为我在第一层,实际
#10 这个方法很有用,可视化后对算法的稳定性会有更好的认识和认知
力扣刷二叉树 tag 的题,很有帮助。信我,我把二叉树 tag 都刷完了。
#15 如果你是要深入研究,最好的资料当然是大模型,跟最善于编程的 claude 3.5 sonnet 或者 gemini-exp-1206 聊聊
理解了程序调用栈就理解了递归。
b 站看左程云,把他递归 dp 那一系列题刷一刷 你大概就懂递归啦 这玩意真得刷题 你光看看不懂也不能深入理解
递归是语法,不是算法。
函数内部调用函数自身,这一类函数调用的形式,被称为函数的递归。
理论上所有循环都可以用递归语法来写,但递归不一定能很容易的转化成循环。
要理解递归函数的执行顺序,可以用树的形式来思考。
the little schemer
github.com/zhyd1997/tls
学门函数式语言,然后做练习
仅考虑书
稍微理解《 The Little Schemer 》
多点理解《 The Little Typer 》
深入理解《计算机程序的构造与解释》 SICP
个人需求:安卓&ios 备份视频照片,偶尔看看视频想玩玩 docker 什么的看了下京东,不支持 M.2 插槽,好像支持 docker ,配置如下:处理器型号 Realtek …
相信大家在上班的时候都要去浏览很多与工作无关的网页,但总是害怕被同事尤其是老板看到,所以,你总是会有个“老板键”什么的。当有人从你身边经过的时候,你会很快速地切换你的桌面屏幕,…
图片来源:GopherSource 在本篇文章中,我们将要学习一下Go语言的代码生成的玩法。Go语言代码生成主要还是用来解决编程泛型的问题,泛型编程主要解决的问题是因为静态类型…