【发布时间】:2016-03-07 06:12:13
【问题描述】:
我搜索了很多斐波那契程序的示例。他们都不计算大数。我的程序计算斐波那契(10000)。我的任务是斐波那契(100000)和斐波那契(200000)。你有什么想法,也许它可以是线程?
import java.math.*;
import java.io.*;
public class FastFibonacci
{
private static BigInteger[] answers;
private static BigInteger one;
private static BigInteger zero;
private static BufferedReader stdin = new BufferedReader( new InputStreamReader( System.in ) );
public static BigInteger fastFibonacci(int n)
{
if((n == 1) || (n == 2))
return answers[0];
if(answers[n-1].compareTo(zero) != 0)
return answers[n-1];
if(answers[n-2].compareTo(zero) == 0)
answers[n-2] = fastFibonacci(n-1);
if(answers[n-3].compareTo(zero) == 0)
answers[n-3] = fastFibonacci(n-2);
return answers[n-2].add(answers[n-3]);
}
public static void main(String[] args)
{
int n;
long time, newTime;
BigInteger answer;
System.out.println("Type a positive integer." );
try{
String input = stdin.readLine();
n = Integer.parseInt( input );
zero = new BigInteger("0");
one = new BigInteger("1");
answers = new BigInteger[n];
answers[0] = new BigInteger("1");
answers[1] = new BigInteger("1");
for(int i = 2; i < n; i++)
answers[i] = new BigInteger("0");
time = System.currentTimeMillis();
answer = fastFibonacci(n);
newTime = System.currentTimeMillis();
System.out.println("The "+n+"th Fibonacci number is "+ answer);
System.out.println("It took " + (newTime-time) + " milliseconds to compute it.");
}
catch(java.io.IOException e)
{
System.out.println(e);
}
}
}
感谢所有回答。
【问题讨论】:
-
你有什么问题?
-
是什么阻止你用更大的数字调用这个函数?真正的问题是什么?
-
当放置 100000 时,线程“main”java.lang.StackOverflowError 出现错误异常
-
您确定在递归调用 fastFibonacci 时达到了基本情况吗?
-
每当我看到一个名为
fastSomething()的函数/方法时,我都会不寒而栗 :p 但无论如何,在你的情况下,看起来你想要记忆......或者从斐波那契套件计算结果的更好方法
标签: java multithreading biginteger fibonacci