c语言求阶乘的函数

来源:百度知道 编辑:UC知道 时间:2024/05/09 06:26:54
int fac(int n)
{static int f=1;
f=f*n;
return(f);
}
main()
{int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
fac()函数是实现求阶乘的,怎么实现的呢

f是fac()函数内部的静态变量,那么,f只在第一次进入fac()函数时才执行其初始化操作,以后都会跳过初始化操作。所以第一次执行fac(1)函数时,f初始化为1,并乘以1,f仍为1;第二次执行fac(2)时,跳过初始化操作,f=f*2,f为2;第三次执行fac(3)时,跳过初始化操作,f=f*3,f为6;第四次执行fac(4)时,跳过初始化操作,f=f*4,f为24;......以此类推。

由于f定义为静态(static)整数
每次执行fac时是不随fac的执行完毕清除的
所以可以累乘
i:1 f:1
i:2 f:1*2=2;
i:3 f:2*3=6
i:4 f:6*4=24
...

  阶乘:
  阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。
  一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
  亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
  

  C语言
  在 C 语言中,使用循环语句可以很方便的求出阶乘的值,下面介绍一个很简单的阶乘例子。(因为网上多数是比较麻烦的方法)
  【计算出“ 1!+ 2!+ 3!+ …… + 10!”的值是多少?】

  #include<stdio.h>
  int main()
  {
  int x;
  long j=1,sum=0;
  for(x=1;x<=10;x++)
  {
  j*=x;
  sum+=j;
  }
  printf("1!+2!+...+10!=%ld\n",sum);
  return 0;
  }
  

  /*结果:4037913*/