Python 2使用朴素的阶乘算法:
1121 for (i=1 ; i<=x ; i++) {
1122 iobj = (PyObject *)PyInt_FromLong(i);
1123 if (iobj == NULL)
1124 goto error;
1125 newresult = PyNumber_Multiply(result, iobj);
1126 Py_DECREF(iobj);
1127 if (newresult == NULL)
1128 goto error;
1129 Py_DECREF(result);
1130 result = newresult;
1131 }
Python 3使用分治法阶乘算法:
1229 * factorial(n)的形式为2 ** k * m,m为奇数。k和m是
1230 *单独计算,然后使用左移组合。
有关讨论,请参见Python Bugtracker问题。感谢DSM指出这一点。