dog*_*ane 19
没有递归:
int result = numbers[0];
for(int i = 1; i < numbers.length; i++){
result = gcd(result, numbers[i]);
}
return result;
Run Code Online (Sandbox Code Playgroud)
对于非常大的数组,使用fork-join模式可能会更快,您可以在其中拆分数组并并行计算gcds.这是一些伪代码:
int calculateGCD(int[] numbers){
if(numbers.length <= 2){
return gcd(numbers);
}
else {
INVOKE-IN-PARALLEL {
left = calculateGCD(extractLeftHalf(numbers));
right = calculateGCD(extractRightHalf(numbers));
}
return gcd(left,right);
}
}
Run Code Online (Sandbox Code Playgroud)