定義
從1到n的連續自然數相乘的積,叫做階乘,用符号n!表示。如5!=1×2×3×4×5。規定0!=1。
計算方法
正整數階乘指從1乘以2乘以3乘以4一直乘到所要求的數。
例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。 例如所要求的數是6,則階乘式是1×2×3×……×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×……×n,設得到的積是x,x就是n的階乘。
表示方法
任何大于1的自然數n階乘表示方法:
n!=1×2×3×……×n或
n!=n×(n-1)!
20以内數的階乘
以下列出0至20的階乘:
0!=1,注意(0的階乘是存在的)
1!=1,
2!=2,
3!=6,
4!=24,
5!=120,
6!=720,
7!=5,040,
8!=40,320
9!=362,880
10!=3,628,800
11!=39,916,800
12!=479,001,600
13!=6,227,020,800
14!=87,178,291,200
15!=1,307,674,368,000
16!=20,922,789,888,000
17!=355,687,428,096,000
18!=6,402,373,705,728,000
19!=121,645,100,408,832,000
20!=2,432,902,008,176,640,000
另外,數學家定義,0!=1,所以0!=1!
而當n≥5時,n!的個位數字都是0。
舉例
所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。 例如所要求的數是6,則階乘式是1×2×3×……×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×……×n,設得到的積是x,x就是n的階乘。
在表達階乘時,就使用“!”來表示。如h階乘,就表示為h!
階乘一般很難計算,因為積都很大。
以下列出1至10的階乘。
1!=1,
2!=2,
3!=6,
4!=24,
5!=120,
6!=720,
7!=5040,
8!=40320
9!=362880
10!=3628800
另外,數學家定義,0!=1,所以0!=1!
通常我們所說的階乘是定義在自然數範圍裡的,小數沒有階乘,像0.5!,0.65!,0.777!都是錯誤的。
但是,有時候我們會将Gamma函數定義為非整數的階乘,因為當x是正整數n的時候,Gamma函數的值是n-1的階乘。
伽瑪函數(Gamma Function)
Γ(x)=∫e^(-t)*t^(x-1)dt (積分下限是零上限是+∞)(x<>0,-1,-2,-3,……)
運用積分的知識,我們可以證明Γ(x)=(x-1) * Γ(x-1)
所以,當x是整數n時,Γ(n) = (n-1)(n-2)……=(n-1)!
這樣Gamma 函數實際上就把階乘的延拓。
雙階乘
雙階乘用“m!!”表示。
當m是自然數時,表示不超過m且與m有相同奇偶性的所有正整數的乘積。如:
(2n-1)!!=1×3×5×···×(2n-1)
2n!!=2×4×8×···×2n
當m是負奇數時,表示絕對值小于它的絕對值的所有負奇數的絕對值積的倒數。
當m是負偶數時,m!!不存在.
計算機階乘
Python語言中
在Python中, 可以很方便的用更為簡潔方式實現階乘的計算:
deffactorial(n)
ifn==1
return1
else
returnfactorial(n-1)*n
C語言中
在C語言中,使用循環語句可以很方便的求出階乘的值,下面介紹一個很簡單的階乘例子。
¤【計算出“ 1!+ 2!+ 3!+ …… + 10!”的值是多少?】
#include
int main()
{
int x,i,y,n; //輸入一個整數, 計數,遞減的因數,限定循環次數//
scanf("%d",&x);
n=x;
y=x;
for(i=1;i<=n-1;i++,y--)//由于x一上來就是輸入值,所以省了一次:n-1//
x*=(y-1);//也可另設置一個積answer=1;這樣for語句裡就是 i<=x; //
printf("%d",x);
return 0;
}
//while循環也可//
2.網友的想法。(感覺思路更好)
#include
int main()
{
int n,fact=1,i; //輸入一個整數,結果,循環計數//
scanf("%d",&n);
for(i=1;i<=n;i++)
fact*=i;
printf("fact=%dn",fact);
return 0;
}
它不是向定式思維一樣因數遞減然後乘以結果,他是用我們輸入的數限定循環次數,從1開始遞增累乘到我們輸入的數,妙哉!
(b)求階乘之和。
#include
int main()
{
int i,j,n;
long term, sum = 0;
printf("Input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
term=1;
for(j=1; j<=i; j++)
term*=j;
sum+=term;
}
printf("1!+2!+...+%d!=n",n,sum);
return 0;
}
原文鍊接:https://blog.csdn.net/LOG_IN_ME/article/details/78712977
以上使用C++ 11标準
JAVA中public class Main{ final static int MAX=20;//可以替換MAX的值。
public static void main(String [] args)
{ int i = 1;
long result=1;
long [] n = new long[MAX];
do { result *= (i+1);
out.println(i+"! = "+result);
n[i] = result;
i++;
} while (i
n[0] = 1; //階乘end
}
提供另外一種方法:
public static final int fac(int n)
{return (n == 0)? 1 : n * fac(n - 1);
}php
中
if($n>1){
return $n*jc($n-1);
}else{
return 1;
}}?>Python 階乘
#!/usr/bin/env pythonimport sysdef warn():
print("Usage:%s number" % sys.argv[0])
print("Please input max number that you want to do factorial on.")
def factorial(value):
if value == 0:
return 1 elif value == -1:
return (((-1)*(-1))-(-1)*(-1))
else:
I=1 for J in range(1,value);
I*=(J+1)
return Iif __name__ == "__main__":
if len(sys.argv) == 1:
warn() elif len(sys.argv) >2:
warn() elif int(sys.argv[1]) < -1:
print("Please give an integer.")
else:
print("%s!=%s " % (sys.argv[1],factorial(int(sys.argv[1]))))
JavaScript 階乘
function factorial(num){
if (num <= 1)
return 1;
else
return num * arguments.callee(num - 1); }
高精度求階乘
1 C語言
#include
#define N 5000 // modify it to hold larger number
int main(void){
int n, i, j, s, up, f[N] = {0};
scanf("%d", &n);
for (i = 2, f[0] = 1; i <= n; i++)
{
for (j = up = 0; j < N; j++)
{
s = f[j] * i + up;
f[j] = s % 10;
up = s / 10; }}
for (i = N-1; f[i] == 0; i--) ;
for (; i >= 0; i--)
printf("%d", f[i]) ;
printf("n");
return 0;
}
2 Pascal語言
vari,j,n,w : longint;a : array[1..1000] of integer;procedure fact(k : longint);var x,i : longint;begin x := 0; for i := 1 to w do begin a[i] := a[i]*k+x; x := a[i] div 10; a[i] := a[i] mod 10; end; while x>0 DO begin w := w+1; a[w] := x mod 10; x := x div 10; end;end;begin assign(input,'n,i in'); reset(input); assign(output,'n,i out'); rewrite(output); a[1] := 1; w := 1; readln(n); for i := 1 to n do fact(i); for j := w downto 1 do write(a[j]); writeln; close(input); close(output);end.
定義範圍
通常我們所說的階乘是定義在自然數範圍裡的(大多科學計算器隻能計算0~69的階乘),小數科學計算器沒有階乘功能,如0.5!,0.65!,0.777!都是錯誤的。但是,有時候我們會将Gamma函數定義為非整數的階乘,因為當x是正整數n的時候,Gamma函數的值是n-1的階乘。



















