2017-09-17 4 views
1

J'ai une tâche, ils me donnent une récursion fibonacci algoritm et demandent de revenir un temps. Je l'ai fait avec .SystemCurrentMilis et je publie mon code ci-dessous, mais les testeurs ont dit qu'il faut trop de temps pour compter le temps, donc je pense que je dois leur donner du temps, parce que la fonction est trop longue. J'espère que le vôtre aide les gars. Comment faire fonctionner la fonction timetocompute plus vite sur tout ce qui vient.Comment obtenir le temps de la récursion Fibonacci

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

La programmation dynamique est la voie à suivre! Pensez à ce qui se passe quand n = 3 et n = 4, combien de fois appelez-vous la méthode recursiveF? – SMA

+0

Je pensais sur ce sujet et je pense que si cames n = 3 méthode appelle 1 fois plus que n. J'espère que j'ai raison mais je ne comprends pas comment cela m'aide. J'ai été trouvé dans le web que son O (2^n) mais comment son temps de retour je ne comprends pas du tout. – DwaydeWade

+0

Je devrais vous avertir que, si votre instructeur trouve cela, vous pourriez faire face à des accusations de plagiat. Vous devriez plutôt créer un [** Exemple ** minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) qui démontre votre problème sans trop vous départir de votre solution d'affectation. –

Répondre

-1

J'ai créé quelques mesures pour la fonction récursive. Si vous y réfléchissez, si vous pouvez mesurer recursive(n) alors recursive(n+1) serait presque 2 fois plus lent, car il a besoin de calculer la fonction pour n, et n-1 aussi.

  • nième - ms
  • 30-25
  • 31-43
  • 32-70
  • 33-113
  • 34-196
  • 35-301
  • 36 - 513
  • 37 - 926
  • 38-1266
  • 39-2210
  • 40 - 3652

Vous pouvez donc estimer le nombre 40 à partir du moment 30 avec 1,65^10 * 25, qui est 1.65^m*time(n). Cela peut être converti en années. J'essaierais de faire quelque chose comme ça.