求阶乘之和(递归版)(高效) (10 分)
请编写函数,用递归方法求阶乘之和。
SumFac(n)=0!+1!+2!+3+⋯+n!
函数原型
double SumFac(int x);
说明:参数 x 为非负整数,函数值为 0 到 x 的阶乘之和。
要求:不要使用循环语句,不要调用阶乘函数。
提示:需要编写两个函数。首先编写一个递归函数,不妨命名为 SumFac1,直接调用自己得到计算结果;然后再编写 SumFac 函数,它的作用只是给出适当参数来调用 SumFac1 来完成计算。
裁判程序
#include <stdio.h>
double SumFac(int x);
int main()
{
int n;
scanf("%d", &n);
printf("%.10g\n", SumFac(n));
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入样例
4
输出样例
34
代码如下:
double SumFac1(double a,double b,double c ,int x)
{return x<=0?c:SumFac1(a+1,b*a,b+c,x-1);}
double SumFac(int x)
{return SumFac1(2,1,1,x);}