在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

回到顶部