在Java中使用线程和递归来计算斐波那契数
我在Java世界中相对较新,遇到了一个我不明白的问题。
我有一堂课(去斐波那契行):
class Fib { public static int f(int x){
if ( x < 2 )
return 1;
else
return f(x-1)+ f(x-2);
}
}
现在的任务是在单独的线程中分别启动f(x-1)和f(x-2)。一次实现Thread类,另一次实现Runnable。您可能知道,这是我教授的一项练习。
我知道如何在Java中启动线程,并且从理论上知道整个Thread的工作原理,但是我找不到在此递归函数中启动单独的线程的解决方案。
运行功能必须做什么?
大概
public void run(){//int foo=start f(this.x-1)
//int bar=start f(this.x-2)
//return foo+bar?
}
以及如何在可运行函数中粘贴x?x是在创建时传递给对象的吗?
Class Fib ...{ int x;
public ... run ...
public ... f(x)....
}
在主要方法中
(new Fib(x)).start();
还是我走在一条完全错误的道路上?
回答:
为此,您需要1)一种将数字传递到新线程中的方法,2)启动线程,3)等待线程完成,以及4)从线程中获取结果的方法。
您可以通过构造函数传递数字。您可以有一个名为“答案”的公共数据成员来包含计算结果。可以使用start()
方法完成启动线程,然后该join()
方法等待线程完成。
下面的示例演示了这一点。那应该是一个很好的起点;从这里,您可以消除一些混乱,以根据需要获得更好的API。
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");
}
}
}
以上是 在Java中使用线程和递归来计算斐波那契数 的全部内容, 来源链接: utcz.com/qa/397844.html