计算1~n的阶乘之和
阶乘的定义是:n的阶乘等于1*2*3*...*n,通常用n!表示。
那么1到n的阶乘之和,可以用以下公式表示:
sum = 1! + 2! + 3! + ... + n!
循环求解
最简单的方法就是用循环来依次求解每个阶乘并相加,代码如下:
#include <stdio.h>
int main()
{
int n, i;
long long fact = 1, sum = 0;
printf("请输入一个正整数n:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
fact *= i; //求i的阶乘
sum += fact; //计算阶乘之和
}
printf("%d的阶乘之和为%lld\n", n, sum);
return 0;
}
上述代码中,我们通过一个循环来计算1~n的阶乘之和。我们使用了两个变量fact和sum,分别用来记录当前的阶乘和阶乘之和。在每一次循环中,我们先将fact乘以i,然后将结果累加到sum中。
递归求解
除了循环外,我们还可以使用递归的方式来求解阶乘。由于阶乘的递归定义是:n的阶乘等于n乘以(n-1)的阶乘,所以我们可以根据这个递归定义来编写代码:
#include <stdio.h>
long long fact(int n)
{
if (n == 0 || n == 1) { //0和1的阶乘都是1
return 1;
}
else {
return n * fact(n - 1); //n的阶乘等于n乘以(n-1)的阶乘
}
}
int main()
{
int n, i;
long long sum = 0;
printf("请输入一个正整数n:");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
sum += fact(i); //计算阶乘之和
}
printf("%d的阶乘之和为%lld\n", n, sum);
return 0;
}
上述代码中,我们定义了一个递归函数fact来求阶乘。在函数中,我们首先判断n是否为0或1,如果是,则直接返回1,否则返回n乘以(n-1)的阶乘。在主函数中,我们通过一个循环来计算1~n的阶乘之和,并将结果累加到sum中。
总结
本文介绍了两种方法来计算1~n的阶乘之和,一种是循环求解,一种是递归求解。两种方法的代码量都比较少,但是递归方法的递归深度较大,可能会造成栈溢出的问题。在实际应用中,应该根据实际情况选择合适的方法来求解。