私はプログラミングクラスIIのために私はユニヴァーサルで書いているプログラムで助けが必要です。質問は、再帰を使ってフィボナッチ数列を計算するかどうかを尋ねます。計算されたフィボナッチ数を配列に格納して、不要な繰り返し計算を停止し、計算時間を短縮する必要があります。再帰フィボナッチメモ
私は配列と暗記なしでプログラムを動かすことができましたが、今は実装しようとしています。私はそれをどのように構造化するか分からない。私はグーグルでいくつかの本を読んだが、ソリューションの実装方法を解決するのに役立つものはあまり見つかりませんでした。
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
これは '[宿題]'になるでしょう。このタグを追加すると、別のやり方がはるかに簡単になる方法についてのコメントを得ることができます。 ;) –