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