Mémorisation récursive de Fibonacci
J'ai besoin d'aide avec un programme que j'ai écris pour ma Programmation II classe à universtiy. La question demande que l'on calcule la suite de Fibonacci en utilisant la récursivité. On doit stocker les nombres de Fibonacci calculé dans un tableau à arrêter inutilement répétée des calculs et de réduire le temps de calcul.
J'ai réussi à obtenir le programme de travail sans le tableau et la mémorisation, maintenant je suis en train de mettre en œuvre et je suis coincé. Je ne suis pas sûr de savoir comment le structurer. J'ai Googlé et écrémé à travers quelques livres mais je n'ai pas trouvé grand chose pour m'aider à résoudre la façon de mettre en œuvre une solution.
import javax.swing.JOptionPane;
public class question2
{
static int count = 0;
static int [] dictionary;
public static void main(String[] args)
{
int answer;
int num = Integer.parseInt(javax.swing.JOptionPane.showInputDialog("Enter n:"));
javax.swing.JOptionPane.showMessageDialog(null,
"About to calculate fibonacci(" + num + ")");
//giving the array "n" elements
dictionary= new int [num];
if (dictionary.length>=0)
dictionary[0]= 0;
if (dictionary.length>=1)
dictionary[0]= 0;
dictionary[1]= 1;
//method call
answer = fibonacci(num);
//output
JOptionPane.showMessageDialog(null,"Fibonacci("+num+") is "+answer+" (took "+count+" calls)");
}
static int fibonacci(int n)
{
count++;
//Only defined for n >= 0
if (n < 0) {
System.out.println("ERROR: fibonacci sequence not defined for negative numbers.");
System.exit(1);
}
//Base cases: f(0) is 0, f(1) is 1
//Other cases: f(n) = f(n-1) + f(n-2)/
if (n == 0)
{
return dictionary[0];
}
else if (n == 1)
{
return dictionary[1];
}
else
return dictionary[n] = fibonacci(n-1) + fibonacci(n-2);
}
}
Le ci-dessus est incorrecte, la fin de mon fib méthode est le principal problème. Je n'ai aucune idée de la façon de l'obtenir pour ajouter les numéros de manière récursive à l'correctement les parties du tableau.
source d'informationauteur Eogcloud
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de distinguer entre déjà calculé le nombre, et non calculé les nombres dans le dictionnaire, vous n': vous toujours recalculer le nombre.
Similaire à la plupart des solutions ci-dessus, mais en utilisant une Carte à la place.
Programme pour imprimer la première
n
nombres de fibonacci à l'aide de Memoization.Je crois que vous oubliez de réalité chercher des choses dans votre dictionnaire.
Changement
à
et il fonctionne très bien (testé moi-même 🙂
Voici mon implémentation récursive de fibonacci memoization. À l'aide de BigInteger et ArrayList permet de calculer la 100e ou même plus grand terme. J'ai essayé 1000e termes, et le résultat est renvoyé en quelques millisecondes, voici le code:
Exemple de sortie
C'est une autre façon d'aborder memoization récursive de fibonacci() la méthode à l'aide d'un tableau statique de valeurs -
Noter que cette méthode utilise globale(niveau de classe) tableau statique fibArray[]. Avoir un coup d'oeil à l'ensemble du code de l'explication vous pouvez également voir les éléments suivants - http://www.javabrahman.com/gen-java-programs/recursive-fibonacci-in-java-with-memoization/