12 条回复  ·  1340 次点击
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) ``` 当然,你也可以想办法把这个功能做成装饰器
amlee 小成 昨天 23:26
SICP 有一部分专门讲递归
levelworm 初学 2 小时前
还是跟着感兴趣的项目来吧,比如说写个 shadow casting 的算法啥的。
12
返回顶部