Necesito ayuda con un programa que estoy escribiendo para mi clase de Programación II en la universidad. La pregunta pide que uno calcule la secuencia de Fibonacci usando la recursión. Uno debe almacenar los números de Fibonacci calculados en una matriz para detener los cálculos repetidos innecesarios y reducir el tiempo de cálculo.Memorización recursiva de Fibonacci
Logré hacer que el programa funcionara sin la matriz y la memorización, ahora estoy tratando de implementar eso y estoy atascado. No estoy seguro de cómo estructurarlo. Busqué en Google y hojeé algunos libros, pero no he encontrado mucho que me ayude a resolver cómo implementar una solución.
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);
}
}
Lo anterior es incorrecto, el final de mi método fib es el problema principal. No tengo idea de cómo conseguir que agregue los números recursivamente a las partes correctas de la matriz.
Sabe que establecer los valores en un bucle desde el inicio es mucho más rápido que usar la recursión. Solo usaría recursion si esto es tarea y tienes que hacerlo. De hecho, al calcular el mayor número que puede representar es tan rápido de esta manera, es probable que no necesite recordar los valores. es decir, llevará mucho más tiempo dibujar el resultado en la pantalla. –
Cómo me gustaría eso ... Sin embargo, es específico de la pregunta usar recursividad. Alguna manera de enseñarnos cómo funciona, supongo. – Eogcloud
Lo que lo haría '[tarea]] Agregar estas etiquetas le ahorra recibir comentarios acerca de cómo sería mucho más simple hacer de otra manera. ;) –