我需要一些幫助,我正在編寫我的Programming II課程。問題是要求用遞歸計算Fibonacci序列。必須將計算的斐波那契數字存儲在數組中以停止不必要的重複計算並減少計算時間。遞歸斐波那契記憶
我設法讓程序在沒有數組和記憶的情況下工作,現在我試圖實現這一點,並且我被卡住了。我不知道如何構建它。我已經Google和Google瀏覽了一些書籍,但沒有找到太多的東西來幫助我解決如何實施解決方案。
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);
}
}
以上是不正確的,我的fib方法的結束是主要問題。我不知道如何讓它遞歸地將數字添加到數組的正確部分。
您知道,從頭開始設置循環中的值比使用遞歸快得多。如果這是家庭作業,你只能使用遞歸。事實上,通過這種方式來計算可以表示的最大數量非常快,它可能不需要記住值。即僅在屏幕上繪製結果將花費更長的時間。 –
我怎麼會這麼喜歡....這個問題具體到使用遞歸。一些教我們如何運作的方式我猜。 – Eogcloud
這會讓它成爲'[作業]'添加這個標籤可以讓你獲得關於如何以其他方式更簡單的評論。 ;) –