python英镑的近似程序

Emi*_*mir 3 python python-2.7

我正在尝试编写一个简单的程序,打印出1:10整数的第一个Stirling近似值以及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
Run Code Online (Sandbox Code Playgroud)

我得到了因子的错误输出,我在哪里弄乱了代码?

DSM*_*DSM 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
Run Code Online (Sandbox Code Playgroud)

哪个产生

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
Run Code Online (Sandbox Code Playgroud)