Вы можете использовать разделяй и властвуй. Чтобы вычислить gcdN ([]), вы делите список на первую половину и вторую половину. если он имеет только один номер для каждого списка. Вы рассчитываете, используя gcd2 (n1, n2).
Я только что написал быстрый пример кода. (при условии, что все числа в списке являются положительными значениями)
def gcdN(nums):
n = len(nums)
if n == 0: return "ERROR"
if n == 1: return nums[0]
if n >= 2: return gcd2(gcdN(nums[:n//2]), gcdN(nums[n//2:]))
def gcd2(n1, n2):
for num in xrange(min(n1, n2), 0, -1):
if n1 % num == 0 and n2 % num == 0:
return num