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)
但似乎这种方式不适合多线程。有什么方法可以使用多个线程来计算阶乘?
在多线程应用程序中,最好最小化不同线程之间存在的数据依赖性。
在您提到的阶乘的递归解决方案中,很难找到不依赖于其他计算结果的计算。
一种独特的方法是将阶乘分解为多个部分。例如,对于两个线程,可以执行以下操作:
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不同的部分而不是仅仅分为两个部分,可以将其概括为使用线程,如上例所示。