如何获得Fibonacci递归的时间

时间:2017-09-17 09:36:59

标签: java recursion fibonacci

我有一个任务,他们给我一个递归斐波纳契算法,并要求返回一个时间。我用.SystemCurrentMilis完成了,我发布了下面的代码,但是测试人员说它需要花费很长时间来计算时间,所以我认为我必须给他们一些teoretic时间,因为执行函数和获取时间太长。希望对你有帮助。如何使函数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));
}

}

1 个答案:

答案 0 :(得分:-1)

我已经为递归函数创建了一些测量值。如果您考虑一下,如果您可以测量recursive(n),那么recursive(n+1)将慢近2倍,因为它需要计算n和n-1的函数。

  • nth - ms
  • 30 - 25
  • 31 - 43
  • 32 - 70
  • 33 - 113
  • 34 - 196
  • 35 - 301
  • 36 - 513
  • 37 - 926
  • 38 - 1266
  • 39 - 2210
  • 40 - 3652

因此,您可以从第30次估算第40个数字,其中包含1.65 ^ 10 * 25,即1.65^m*time(n)。这可以转换为年。我会尝试这样做。