【发布时间】:2010-12-05 09:32:25
【问题描述】:
以下code 尝试并行化斐波那契数问题。怎么修改才能限制线程数。
我知道斐波那契不是线程的自然候选者。但想知道如何使用线程对其进行优化。
public class Fib extends Thread
{
private int x;
public int answer;
public Fib(int x) {
this.x = x;
}
public void run() {
if( x <= 2 )
answer = 1;
else {
try {
Fib f1 = new Fib(x-1);
Fib f2 = new Fib(x-2);
f1.start();
f2.start();
f1.join();
f2.join();
answer = f1.answer + f2.answer;
}
catch(InterruptedException ex) { }
}
}
public static void main(String[] args)
throws Exception
{
try {
Fib f = new Fib( Integer.parseInt(args[0]) );
f.start();
f.join();
System.out.println(f.answer);
}
catch(Exception e) {
System.out.println("usage: java Fib NUMBER");
}
}
}
【问题讨论】:
-
我喜欢早上做作业的味道...
-
我不确定您是否可以编写多线程斐波那契生成器,因为序列中的每个元素都是最后一个元素的函数。
-
它对合并排序很有帮助。
-
Mariah:参见此处给出的封闭式公式:en.wikipedia.org/wiki/Fibonacci_number;确实有一个序列的任意元素的表达式(封闭形式的公式就是那个)。
-
(当然,知道这种情况会将您的问题从寻找斐波那契数列转移到处理更高幂并找到任意精度的黄金比例;但我想我将这项研究留给您: )
标签: java multithreading