gpt4 book ai didi

java - 在 Java 中使用线程和递归计算斐波那契数列

转载 作者:搜寻专家 更新时间:2023-10-30 21:04:08 26 4
gpt4 key购买 nike

我是 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 中启动一个线程,我也知道整个线程在理论上是如何工作的,但我找不到在这个递归函数中启动单独线程的解决方案。

在run函数中必须做什么?

可能

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) 一种取回结果的方法来自线程。

可以通过构造函数传入数字。您可以有一个名为“answer”的公共(public)数据成员来包含计算结果。可以使用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 - 在 Java 中使用线程和递归计算斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/706048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com