【发布时间】:2017-09-17 09:36:58
【问题描述】:
我有一个任务,他们给我一个递归斐波那契算法并要求返回一个时间。我用 .SystemCurrentMilis 完成了它,并在下面发布了我的代码,但测试人员说计算时间需要很长时间,所以我认为我必须给他们一些理论时间,因为执行函数和获取时间太长。希望对你们有所帮助。如何使函数 timetocompute 在任何即将到来的情况下更快地工作。
import java.math.BigInteger;
import java.math.BigDecimal;
public class Fibonacci {
public BigDecimal timeToComputeRecursiveFibonacci(int n) {
long startTime = System.currentTimeMillis();
recursive(n);
long finishTime = System.currentTimeMillis();
long tempTime = finishTime - startTime;
BigDecimal usedTime = BigDecimal.valueOf(tempTime);
return usedTime;
}
public BigInteger recursive(int n) {
if (n <= 1)
return BigInteger.valueOf(n);
return recursive(n - 1).add(recursive(n - 2));
}
}
【问题讨论】:
-
动态编程是前进的方向!想想当 n = 3 和 n= 4 时会发生什么,你调用了多少次 recursiveF 方法?
-
我正在考虑那个话题,我认为如果出现 n = 3 方法调用比 n 多 1 次。我希望我是对的,但我不明白它如何帮助我。我在网上发现它的 O(2^n) 但它的返回时间我根本不明白。
-
我应该警告你,如果你的导师发现了这个,你可能会面临剽窃的指控。相反,您应该创建一个 Minimal, Complete and Verifiable Example 来演示您的问题,而不会泄露太多的作业解决方案。
-
我真的不明白你在这里要求什么。您似乎并没有要求更快的
recursive(n)——您是在要求更准确地测量其执行时间吗?比System.currentTimeMillis()更快地获取当前时间(以毫秒为单位)的东西?您能否提供一个程序来返回一个太大的数字,以及您认为可接受的大小的指示?