Java/Kotlin中递归方法的跟踪
在python中,我可以编写如下跟踪函数:Java/Kotlin中递归方法的跟踪,java,kotlin,Java,Kotlin,在python中,我可以编写如下跟踪函数: def跟踪(f): f、 缩进=0 def g(x): 打印(“|”*f.indent+“|--”,f.|u name|uuuux) f、 缩进+=1 值=f(x) 打印(“|”*f.indent+”|--“,“return”,repr(value)) f、 缩进-=1 返回值 返回g fib=跟踪(fib) 打印(fib(4)) 它可以漂亮地打印任何通用递归函数的递归跟踪: $python fib.py |--fib 4 ||--fib 3 ||
def跟踪(f):
f、 缩进=0
def g(x):
打印(“|”*f.indent+“|--”,f.|u name|uuuux)
f、 缩进+=1
值=f(x)
打印(“|”*f.indent+”|--“,“return”,repr(value))
f、 缩进-=1
返回值
返回g
fib=跟踪(fib)
打印(fib(4))
它可以漂亮地打印任何通用递归函数的递归跟踪:
$python fib.py
|--fib 4
||--fib 3
|| |--fib 2
|| | |--fib 1
|| | | |--返回1
|| | |--fib 0
|| | | |--返回1
|| | |--返回2
|| |--fib 1
|| | |--返回1
|| |--返回3
||--fib 2
|| |--fib 1
|| | |--返回1
|| |--fib 0
|| | |--返回1
|| |——返回2
||——返回5
5.
是否可以用Java/Kotlin编写一个简单的类似程序?还是只有AOP或类似的工具才可以使用它?编辑:格式与您的格式不完全匹配,但这对您来说很容易解决:) 下面是我的评论附带的代码示例。虽然它很难看,但它显示了它是如何工作的。您不能用简单的lambda来表示它,因为您无法在Java中轻松递归lambda:
import java.util.function.BiFunction;
导入java.util.function.function;
课堂擦伤{
私有静态int fib(int n,函数_fib){
如果(n)在没有AOP的情况下是不可能的,除非您重写fib
函数以获取一个函数
,它使用该函数来计算“next”fib
值。然后您可以将fib
函数包装为一个执行您想要的跟踪的函数。
|-- fib 5
| |-- fib 4
| | |-- fib 3
| | | |-- fib 2
| | | | |-- fib 1
| | | | | |-- return 1
| | | | |-- fib 0
| | | | | |-- return 0
| | | | |-- return 1
| | | |-- fib 1
| | | | |-- return 1
| | | |-- return 2
| | |-- fib 2
| | | |-- fib 1
| | | | |-- return 1
| | | |-- fib 0
| | | | |-- return 0
| | | |-- return 1
| | |-- return 3
| |-- fib 3
| | |-- fib 2
| | | |-- fib 1
| | | | |-- return 1
| | | |-- fib 0
| | | | |-- return 0
| | | |-- return 1
| | |-- fib 1
| | | |-- return 1
| | |-- return 2
| |-- return 5