关于如何衡量获得第45个斐波纳契数的时间的想法

时间:2017-12-05 04:36:36

标签: java recursion fibonacci tail-recursion

我正在研究教科书“构建Java程序”的问题19第12章中提到的问题的变体。基本上,我正在使用Fibonacci序列进行递归问题。虽然我制作的程序有效,但我正在研究的问题的一部分是我还需要通过使用1,2和实现中给出的实现来测量获得第45个Fibonacci数的时间,打印你的实现比问题中给出的实现快多少次。虽然我查看了这个页面(Calculating a Fibonacci number with array),但我想知道是否有一种方法可以在没有大量代码更改的情况下实现它。这是使用的原始方法:

public static int fibonacci (int n) {
      if(n <= 2){
        return 1;
      } else {
         return fib (n - 1) + fib(n - 2);
      }
}

这就是我所做的我用两个java文件解决了这个问题:一个用作测试主类,另一个用递归算法:

PrintValues.java

import java.util.Scanner;

public class PrintValues {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter the number value: ");
        int n = scan.nextInt();
        HelperBinary.countBinary(n);
        //fib(double nth);
    }
}

HelperBinary.Java:

public class HelperBinary {

    public static void countBinary(int n) {
        if (n < 0) {
            throw new IllegalArgumentException();
        }
        countBinary(new char[n], n);
    }

    private static void countBinary(char[] preFx, int n) {
        if (n == 0) {
            /* This is the base case
            */
            System.out.println(preFx);
        } else {
            /* This is the "recursive" case.
            */
            final int i = preFx.length - n;

            /* Assign a '0' preFx and recurse
            */
            preFx[i] = '0';
            countBinary(preFx, n - 1);

            /*Assign a '1' preFx  and recurse
            */
            preFx[i] = '1';
            countBinary(preFx, n - 1);
        }
    }
}

任何帮助都会受到重视。

1 个答案:

答案 0 :(得分:-1)

计划计划时有许多细微之处(请参阅重复链接中的问题),但这里有两种快速的方法可以了解运行时间。

第一种方式取决于您使用的操作系统。如果使用Linux或OS X,则可以使用time命令来测量命令执行的时间。然后你可以像这样运行你的java程序:

time java -jar myJavaProgram.jar

time会在控制台上打印多长时间。

第二种方法是用Java计时。

class SomeClass {

    private static void main(String[] args) {
        // record the start time
        long startTime = System.currentTimeMillis();

        // run your fibonnaci method and calculate the 45th number
        long fib45 = fib(45);

        // record the finishing time
        long endTime = System.currentTimeMillis();

        // calculate the time taken in milliseconds
        long runTime = endTime - startTime;

        System.out.println("45th Fibonacci number: " + fib45);
        System.out.println("Run time: " + runTime);
    }
}

运行几次并取平均运行时间。