题目
请编写函数,求阶乘之和。
SumFac(n)=0!+1!+2!+3+⋯+n!
函数原型
double SumFac(int x); |
说明:参数 x 为自然数,函数值为 0 到 x 的阶乘之和。
裁判程序
#include <stdio.h>
double Fac(int x);
double SumFac(int x);
int main()
{
int n;
scanf("%d", &n);
printf("%.10g\n", SumFac(n));
return 0;
}
double Fac(int x)
{
...(略)...
}
/* 你提交的代码将被嵌在这里 */
说明:利用前面练习中的阶乘函数。
要求:用递归方法求阶乘之和,不得使用循环语句。
输入样例
10 |
输出样例
4037914 |
关联习题:阶乘函数。
参考答案
double SumFac(int x)
{
if (x == 0) {
return 1; // 判断x是否大于0,等于0时退出程序
}
if (x > 0) {
return Fac(x) + SumFac(x - 1); // 可理解为反复调用Fac()函数,数值x不断减1,直至为零,x传参至函数Fac()函数与后一项不断相加,实现求和
}
}
/* Fac()函数靠自己猜 */
整体效果实现
#include <stdio.h>
double Fac(int x);
double SumFac(int x);
int main()
{
int n;
scanf("%d", &n);
printf("%.10g\n", SumFac(n));
return 0;
}
double Fac(int x) {
x = (double)x;
if (x == 0) {
return 1;
}
if (x > 0) {
return x * Fac(x - 1); // 递归实现阶乘函数
}
}
/*
double SumFac(int x) {
double value = 0;
while (x >= 0) {
value = value + Fac(x);
x--;
}
return value;
}
*///SumFac()函数第一种实现方式
double SumFac(int x)
{
if (x == 0) {
return 1;
}
if (x > 0) {
return Fac(x) + SumFac(x - 1);
}
}
//SumFac()函数第二种实现方式