【发布时间】:2011-12-14 02:14:06
【问题描述】:
我需要一些帮助,我正在为我在大学的编程 II 课程编写程序。该问题要求使用递归计算斐波那契数列。必须将计算出的斐波那契数存储在一个数组中,以停止不必要的重复计算并缩短计算时间。
我设法让程序在没有数组和记忆的情况下工作,现在我正在尝试实现它,但我被卡住了。我不确定如何构建它。我在 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方法结束是主要问题。我不知道如何让它递归地将数字添加到数组的正确部分。
【问题讨论】:
-
您知道从一开始就在循环中设置值比使用递归要快得多。如果这是家庭作业并且您必须这样做,我只会使用递归。事实上,通过这种方式计算你可以表示的最大数字是如此之快,它可能不需要记住值。也就是说,在屏幕上绘制结果需要更长的时间。
-
我会多么喜欢那个......不过,使用递归是特定于问题的。我猜想某种方式可以教我们它是如何工作的。
-
顺便说一句,这个词是memoization,不是记忆。
标签: java math recursion fibonacci