gpt4 book ai didi

java - 尝试在 Java 中使用递归任务(Fork 和 Join)计算 (3*3)^2 时出错

转载 作者:行者123 更新时间:2023-11-30 05:25:41 24 4
gpt4 key购买 nike

我必须使用Java Recursive Task (Fork and Join)来计算如下内容:(3*3)^2。

我有这个应该可以工作的代码:

public class ForkJoin1 extends RecursiveTask<Long> {
int num;
public ForkJoin1 (int num) {
this.num = num;
}
@Override
protected Long compute() {
if(num == 0) return Long.valueOf(1);
ForkJoin1 fj1 = new ForkJoin1(num*num);
ForkJoin1 fj2 = new ForkJoin1((int) Math.pow(num, 2));
fj1.fork();
return fj1.compute() + fj2.join();
}
public static void main (String[] args) {
ForkJoinPool pool = new ForkJoinPool();
System.out.println("Result: " + pool.invoke(new ForkJoin1(3)));
}
}

但是,当我运行它时,我收到以下错误: enter image description here

我做错了什么?

请注意,我是 Java 中 Recursivetask 的新手。

最佳答案

您的代码使用num = 3调用compute
因此,您创建一个新对象并使用 num = 9 (3 * 3) 调用 compute
因此,您创建一个新对象并使用 num = 81 (9 * 9) 调用 compute
因此,您创建一个新对象并使用 num = 6561 (81 * 81) 调用 compute
因此,您创建一个新对象并使用 num = 43046721 (6561 * 6561) 调用 compute
因此,您创建一个新对象并使用 num = -501334399 (43046721 * 43046721) 调用 compute
...

糟糕,数字溢出。无论如何,它都会继续,num 从一开始就具有以下值:

3
9
81
6561
43046721
-501334399
2038349057
-1970898431
120648705
1995565057
-1876701183
-1454923775
1989099521
2099150849
977076225
1954152449
-386662399
-773324799
-1546649599
1201668097
-1891631103
511705089
1023410177
2046820353
-201326591
-402653183
-805306367
-1610612735
1073741825
-2147483647
1
1
1
1
1
...

如您所见,num 永远不会变成 0,因此调用永远不会停止。

关于java - 尝试在 Java 中使用递归任务(Fork 和 Join)计算 (3*3)^2 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58673094/

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