本文目錄一覽:
C語言 利用靜態變數求s=1+2!+3!+……+n!的階乘總和
#include stdio.h
int fac(int);
int main()
{
int i,sum=0,n;
printf(“請輸入n的值:”);
scanf(“%d”,n);
for(i=1;i=n;i++)
s+=fac(i);
printf(“sum=%d\n”,s);
return 0;
}
int fac(int n)
{
static int f=1;
f=f*n;
return f;
}
c語言怎麼用遞歸調用函數的方法求n的階乘?
1、打開VC6.0軟體,新建一個C語言的項目:
2、接下來編寫主程序,首先定義用來求階乘的遞歸函數以及主函數。在main函數里定義變數sum求和,調用遞歸函數fact(),並將返回值賦予sum,最後使用printf列印sum的結果,主程序就編寫完了:
3、最後運行程序,觀察輸出的結果。以上就是C語言使用遞歸求階乘的寫法:
C語言,用靜態局部變數計算階乘原理是什麼?
靜態變數可以記錄上一次的值,因為你這是用for(i=1這樣來循環的,所以比如第一次循環
i=1 p=1*1=1
i=2 p=1*2=2(1是上一次的p)
i=3 p=2*3=6 (2是上一次的p)
i=4 p=6*4=24
這樣自然就計算出了1到10之間,每個數的階乘。
c語言求階乘的函數
階乘:
階乘是基斯頓·卡曼(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!」的值是多少?】
#includestdio.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*/
Pascal中program test;
varn:longint;
function jc(n:longint):qword;
begin if n=0 then jc:=1 else jc:=n*jc(n-1)end;
begin readln (n); writeln (jc(n))end.
C++ 中
#includeiostream
using namespace std;
long long f(int n)
{
long long e=1;
if(n0)
e=n*f(n-1);
coutn”!=”eendl;
return e;
}
int main()
{
int m=20;
f(m);
return 0;
}
以上使用 C++ 11 標準
也可以利用積分求浮點數階乘:
#includecstdio
#includecmath
double s;
const double e=exp(1.0);
double F(double t)
{
return pow(t,s)*pow(e,-t);
}
double simpson(double a,double b)
{
double c=a+(b-a)/2;
return (F(a)+4*F(c)+F(b))*(b-a)/6;
}
double asr(double a,double b,double eps,double A)
{
double c=a+(b-a)/2;
double L=simpson(a,c),R=simpson(c,b);
if(fabs(L+R-A)=15*eps) return L+R+(L+R-A)/15.0;
return asr(a,c,eps/2,L)+asr(c,b,eps/2,R);
}
double asr(double a,double b,double eps)
{
return asr(a,b,eps,simpson(a,b));
}
int main()
{
scanf(“%lf”,s);
printf(“%lf\n”,asr(0,1e2,1e-10));
return 0;
}
原創文章,作者:HDNI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142935.html