定义
从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的阶乘。



















