2017-12-05 4 views
0

교과서 "Building Java Programs"의 Problem 19 Chapter 12에 설명 된 문제의 변형에 대해 작업하고 있습니다. 필자는 피보나치 시퀀스를 사용하여 재귀 문제를 수행하고 있습니다. 비록 작품을 만들었지 만, 내가 작업하고있는 문제의 일부인 은 피보나치 수를 1, 2, 1로 구현하여 시간을 측정하고 문제를 해결하는 방법을 보여줍니다. 많은 경우에 구현은 문제에서 주어진 것보다 빠릅니다. 이 페이지 (Calculating a Fibonacci number with array)를 보았을 때 많은 코드 변경없이이를 구현하는 방법이 있는지 궁금합니다. 이 때 사용한 원래 방법 :피보나치 수를 45 번 측정하는 방법에 대한 아이디어

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

그리고 이것은 내가 두 개의 자바 파일을 사용하여 문제 한 무슨 짓을했는지입니다 :와 테스트의 주요 클래스와 재귀 알고리즘 다른 역할을 하나

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

프로그램을 타이밍 할 때 여러 가지 미묘한 점이 있지만 (중복 링크의 질문 참조), 런타임에 대한 아이디어를 얻으려면 두 가지 빠른 방법이 있습니다.

첫 번째 방법은 사용중인 운영 체제에 따라 다릅니다. Linux 또는 OS X를 사용하는 경우 time 명령을 사용하여 명령 실행 시간을 측정 할 수 있습니다. 그럼 당신은이처럼 자바 프로그램을 실행할 수 있습니다 :

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); 
    } 
} 

몇 번 실행하고 평균 실행 시간을 가져옵니다.

+0

좋은 방법이지만 모든 방법이 무효이기 때문에 어떻게 길게 fib45 = fib (45)가 작동합니까? –

+0

이것은 메서드 실행을위한 자리 표시 자일 뿐이며 필요한 경우 실행할 수 있습니다. 아무것도 반환하지 않으면 그냥 호출하십시오. 그러나 필자는 fibonacci 번호가 fibonacci 번호를 반환해야한다고 계산하는 방법으로 생각합니다. 그렇지 않으면 유용하지 않습니다. – Matt

관련 문제