我正在尝试编写一个简单的程序,打印整数1:10的第一个Stirling's approximation和1:10阶乘的实际值。这是我的代码:
import math
nf =1
def stirling(n):
return math.sqrt(2*math.pi*n)*(n/math.e)**n
print "n","\t", "Stirling","\t\tFactorial"
for x in range (1,11):
for y in range(1,x):
nf *=y
print x,"\t", stirling(x), "\t\t", nf
我得到了因子的错误输出,我在哪里弄乱了代码?
答案 0 :(得分:9)
(1)每次计算阶乘时都需要重置nf=1
(或者,每次只能乘以一个新数字,这样会更有效率);
(2)range(1,x)
不包含x,因此您的阶乘不包括右上界。以下应该有效:
nf = 1
for x in range (1,11):
nf *= x
print x,"\t", stirling(x), "\t\t", nf
产生
n Stirling Factorial
1 0.922137008896 1
2 1.91900435149 2
3 5.83620959135 6
4 23.5061751329 24
5 118.019167958 120
6 710.078184642 720
7 4980.39583161 5040
8 39902.3954527 40320
9 359536.872842 362880
10 3598695.61874 3628800