c语言计算1~n的阶乘之和

计算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的阶乘之和,一种是循环求解,一种是递归求解。两种方法的代码量都比较少,但是递归方法的递归深度较大,可能会造成栈溢出的问题。在实际应用中,应该根据实际情况选择合适的方法来求解。

后端开发标签