gpt4 book ai didi

java - 如何从 Java 代码中删除重复项?

转载 作者:行者123 更新时间:2023-12-02 01:50:25 26 4
gpt4 key购买 nike

我编写了一个测试,将运行斐波那契递归 40 并运行内存递归斐波那契 40,并比较时间至少有一个数量级的差异。这是我到目前为止得到的:

      @Test
void MemoizedMagnitudeDifferentFromRecursion(){
Fibonacci simpleRecursiveFibonacci = new SimpleRecursiveFibonacci();
Fibonacci memoizedRecursiveFibonacci = new MemoizedRecursiveFibonacci();
int n = 40;

long recursionStartTime = System.nanoTime();
simpleRecursiveFibonacci.fibonacci(n);
long recursionTime = System.nanoTime() - recursionStartTime;

//The code below does the same as the code above, how can I remove duplicated code?
long memoizedStartTime = System.nanoTime();
memoizedRecursiveFibonacci.fibonacci(n);
long memoizedTime = System.nanoTime() - memoizedStartTime;

assertTrue(recursionTime/memoizedTime > 1);
}

最佳答案

将逻辑提取到函数中,并将要作为 Runnable 运行的逻辑传递。让函数运行传入的逻辑片段并返回运行它所花费的时间。

private long execute(Runnable runnable) {
long startTime = System.nanoTime();
runnable.run();
return System.nanoTime() - startTime;
}

称其为

long recursionTime = execute(() -> simpleRecursiveFibonacci.fibonacci(n));
long memoizedTime = execute(() -> memoizedRecursiveFibonacci.fibonacci(n));
assertTrue(recursionTime/memoizedTime > 1);
<小时/>

还有一个选项(按照 SystemGlitch@ 的建议)是传递一个 Fibonacci 实例和一个 int 并在方法内调用 fibonacci。

private long execute(Fibonacci fibonacciInstance, int n) {        
long startTime = System.nanoTime();
fibonacciInstance.fibonacci(n);
return System.nanoTime() - startTime;
}

称其为

long recursionTime = execute(simpleRecursiveFibonacci, n);
long memoizedTime = execute(memoizedRecursiveFibonacci, n);
assertTrue(recursionTime/memoizedTime > 1);

关于java - 如何从 Java 代码中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com