package object_out;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;
public class TestSum {
public int recursionSum(int end) {
int processorCount = Runtime.getRuntime().availableProcessors();
ForkJoinPool pool = new ForkJoinPool(processorCount);
RecursionSumImpl aRecursionSumImpl = new RecursionSumImpl(end);
pool.invoke(aRecursionSumImpl);
return aRecursionSumImpl.result;
}
public class RecursionSumImpl extends RecursiveAction {
private int end;
private int result;
private RecursionSumImpl(int end) {
this.end = end;
}
protected void compute() {
if ((end < 5)) {
result = recursionSum(end);
return;
} else {
RecursionSumImpl task1 = new RecursionSumImpl(end - 1);
RecursionSumImpl task2 = new RecursionSumImpl(end - 2);
invokeAll(task1, task2);
result = sum(task1.result, task2.result);
}
}
public int recursionSum(int end) {
if (end <= 0) {
return 0;
} else {
return sum(recursionSum(end - 1), recursionSum(end - 2));
}
}
}
public int sum(int a, int b) {
return a + b;
}
}