4

1:10 階乗の実際の値と一緒に整数 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

階乗の出力が間違っています。どこでコードを台無しにしましたか?

4

1 に答える 1

10

nf=1(1)階乗を計算するたびにリセットする必要があります(または、代わりに、毎回新しい数値を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
于 2012-07-11T17:05:18.587 に答える