quote

giovedì, dicembre 22, 2016

factorial with RecursiveTask

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.RecursiveTask;
/**
* Created by enrico on 12/21/16.
*/
public class Factorial {
private static class FactorialTask extends RecursiveTask<Long>{
long n;
private FactorialTask(long n){
this.n = n;
}
@Override
protected Long compute() {
if(n<=1) return 1L;
FactorialTask ft = new FactorialTask(n-1);
ft.fork();
return n * ft.join();
}
}
public long factorial(long n){
ForkJoinTask<Long> fjt = new FactorialTask(n);
ForkJoinPool pool = new ForkJoinPool();
return pool.invoke(fjt);
}
public static void main(String[] args) {
long result = new Factorial().factorial(5);
System.out.println(result);
}
}
view raw Factorial.java hosted with ❤ by GitHub

Nessun commento: