2017-09-17 15 views
1

私はタスクを持っています、彼らは私に再帰フィボナッチアルゴリズムを与え、時間を返すように頼みます。私はSystemCurrentMilisでこれを行いました。下のコードを投稿しましたが、テスターは時間がかかりすぎると言いました。機能を実行して時間がかかりすぎるので、時間をかけてください。あなたの助けを借りてみましょう。どのようにしてn時間になるかに関わらず、関数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)); 
} 

}

+0

ダイナミックなプログラミングが進む道です! n = 3、n = 4のとき何が起こるか考えてみましょう。あなたはrecursiveFメソッドを何回呼び出しますか? – SMA

+0

私はその話題を考えていました。私はcames n = 3のメソッドがnより1回多く呼び出すと思います。私は私の右が願っていますが、私はその助け私が理解していない。私はWebでそのO(2^n)が見つかりましたが、その復帰時間はどういうわけか全く理解できません。 – DwaydeWade

+0

私はあなたの指導者がこれを見つけたら盗作の告発に直面する可能性があることを警告しなければなりません。代わりに、割り当てソリューションをあまりにも多く配らずに問題を示す[**最小**、完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成する必要があります。 –

答えて

-1

Iは、再帰関数のためのいくつかの測定値を作成しています。あなたがそれについて考えるならば、recursive(n)を測定することができれば、recursive(n+1)は、nとn-1の関数を計算する必要があるので、ほぼ2倍遅くなります。

  • 第n - MS
  • 30から25
  • 31から70
  • 33 - - 113
  • 34から196
  • 35から301
  • 32 - 513
  • 37 - 926
  • 40 - -38から1266

3652は、だから、1.65^m*time(n)ある1.65^10 * 25、と30時から40数を推定することができます。これは年に変換することができます。私はこのようなことをやろうとします。

関連する問題