私は最近、大きな整数の階乗アルゴリズムを検討することにしました。この「分割統治」アルゴリズムは、単純な反復アプローチや素数分解アプローチよりも高速です。
def multiply_range(n, m):
print n, m
if n == m:
return n
if m < n:
return 1
else:
return multiply_range(n, (n+m)/2) * multiply_range((n+m)/2+1, m)
def factorial(n):
return multiply_range(1, n)
アルゴリズムが機能する理由を理解しています。それは、乗算を再帰的に小さな部分に分割するだけです。私が理解していないのは、なぜこの方法が速いのかということです。