在Python中使用多个线程计算阶乘

Ale*_*v94 5 python algorithm multithreading

我使用Python 2.7,我有一个任务来编写一个使用多个线程来计算阶乘的函数。我尝试使用传统的递归方法来做到这一点,例如

def factorial(n):
    if n < 1:
        return 1
    else:
        return n * factorial(n - 1)
Run Code Online (Sandbox Code Playgroud)

但似乎这种方式不适合多线程。有什么方法可以使用多个线程来计算阶乘?

qwe*_*man 5

在多线程应用程序中,最好最小化不同线程之间存在的数据依赖性。

在您提到的阶乘的递归解决方案中,很难找到不依赖于其他计算结果的计算。

一种独特的方法是将阶乘分解为多个部分。例如,对于两个线程,可以执行以下操作:

n! = [1 * 2 * 3 * .. * (n/2)] * [(n/2 + 1) * ... * n]

第一个线程将计算值:

v1 = 1 * 2 * 3 * .. * (n/2)

第二个线程将计算:

v2 = (n/2 + 1) * ... * n

然后,当两个线程都结束时,主线程将进行计算n! = v1 * v2

k通过将输入阶乘分解为k不同的部分而不是仅仅分为两个部分,可以将其概括为使用线程,如上例所示。