Ho bisogno di aiuto con un programma che sto scrivendo per la mia classe Programming II in universtiy. La domanda chiede che si calcoli la sequenza di Fibonacci usando la ricorsione. Uno deve memorizzare i numeri di Fibonacci calcolati in una matrice per interrompere calcoli ripetuti non necessari e ridurre al tempo di calcolo.Memoizzazione ricorsiva di Fibonacci
Sono riuscito a far funzionare il programma senza l'array e la memorizzazione, ora sto cercando di implementarlo e sono bloccato. Non sono sicuro di come strutturarlo. Ho cercato su Google e sfogliato alcuni libri, ma non ho trovato molto per aiutarmi a risolvere come implementare una soluzione.
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);
}
}
Quanto sopra è corretta, la fine del mio metodo fib è il problema principale. Non ho idea di come ottenere di aggiungere i numeri in modo ricorsivo alle parti correttamente della matrice.
Sapete che l'impostazione dei valori in un loop dall'inizio è molto più veloce rispetto all'utilizzo della ricorsione. Userei la ricorsione solo se questo è compito a casa e tu devi. In effetti, calcolare il numero più grande che si può rappresentare è così veloce che è probabile che non sia necessario ricordare i valori. Ad esempio, ci vorrà molto più tempo per disegnare il risultato sullo schermo. –
Come mi piacerebbe tanto ... Però è specifico per la domanda usare la ricorsione. Qualche modo di insegnarci come funziona credo. – Eogcloud
Quale potrebbe rendere '[compiti a casa]? L'aggiunta di questo tag consente di ottenere commenti su come sarebbe molto più semplice fare un altro modo. ;) –