2017-12-05 6 views
0

教科書「Building Java Programs」のProblem 19 Chapter 12に記載されている問題のバリエーションに取り組んでいます。本質的には、フィボナッチシーケンスを使って再帰問題を実行しています。私が作ったプログラムは、私が取り組んでいる問題の一部ですが、は、フィボナッチ数を45回取得する時間を測定する必要があります。多くの場合、あなたの実装は問題で与えられたものよりも速いです。私はこのページ(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); 
     } 
} 

そして、これは私が、私は2つのJavaファイル使用して問題をやったやったです:再帰アルゴリズムででテストメインクラスとして機能1と他の:

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

プログラムのタイミングを立てるときには微妙な点がありますが(重複したリンクの質問を参照してください)、ランタイムを知るには2つの方法があります。

最初の方法は、使用しているオペレーティングシステムによって異なります。 LinuxまたはOS Xを使用している場合は、timeコマンドを使用して、コマンドの実行時間を測定できます。そして、あなたはこのようなあなたのJavaプログラムを実行することができます:

time java -jar myJavaProgram.jar 

timeは、それがかかった時間、コンソールに出力します。

2番目の方法は、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

これはあなたのメソッドを実行するための単なるプレースホルダですが、必要に応じて実行することができます。何も返されない場合は、単にそれを呼び出します。しかし、私はフィボナッチ数を計算する方法のように感じ、おそらくフィボナッチ数を返すべきです。それ以外の場合は有用ではないようです。 – Matt

関連する問題