【问题标题】:How to get time of Fibonacci recursion如何获得斐波那契递归的时间
【发布时间】: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() 更快地获取当前时间(以毫秒为单位)的东西?您能否提供一个程序来返回一个太大的数字,以及您认为可接受的大小的指示?

标签: java recursion fibonacci


【解决方案1】:

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

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

所以你可以用 1.65^10*25 从第 30 次开始估计第 40 个数字,即1.65^m*time(n)。这可以转换为年。我会尝试做这样的事情。

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 2014-12-28
    • 2014-04-02
    • 1970-01-01
    • 2017-11-18
    • 2014-01-08
    • 2011-12-14
    • 2012-11-29
    相关资源
    最近更新 更多