可能自己移动端开发内存限制栈溢出的原因,所以很少用递归多用队列循环,导致我在递归这块不太熟悉,最近在看书,里面代码有比较多的递归用法,递归我会是会,由外到里,再从里到外,但是不算很熟悉
举报· 1339 次点击
登录 注册 站外分享
12 条回复  
levelworm 初学 2 小时前
还是跟着感兴趣的项目来吧,比如说写个 shadow casting 的算法啥的。
amlee 小成 昨天 23:26
SICP 有一部分专门讲递归
dragondove 小成 昨天 23:16
初学的难主要还是缺乏可视化的手段吧,还有一个是用递归模拟迭代的多参数混乱。可以看下类似 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) ``` 当然,你也可以想办法把这个功能做成装饰器
mumbler 小成 昨天 22:48
科目二都没过,就上路了,你肯定上的不是正规驾校
iOCZS 小成 昨天 21:53
更多时候需要结合场景吧,譬如说深度优先遍历,回溯等。
iOCZS 小成 昨天 21:52
递归有啥特别要学的吗?不过有个尾递归优化的东西。
henix 小成 昨天 21:40
https://oi-wiki.org/basic/divide-and-conquer/
nnegier 楼主 小成 昨天 21:26
@kapaseker 这个还是必须要学,用不用是一回事
kapaseker 初学 昨天 21:01
递归有什么非要用的场景吗?其实这个没有非得学的必要
12下一页
返回顶部