Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/Kotlin中递归方法的跟踪_Java_Kotlin - Fatal编程技术网

Java/Kotlin中递归方法的跟踪

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 ||

在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
|| |--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