目录
递归实现:
利用递归的形式实现阶乘的求和功能,但是要注意栈溢出,每次递归都会调用,都会压栈,占用栈中内存,如果过多就会发生栈溢出,造成程序崩溃。
思想:
利用for循环实现求和,创建函数 (功能):递归函数实现 每个数求得阶乘的结果
代码实现:
#include<stdio.h>
long long RJieCheng(int n)
{
if (n == 1)
{
return 1;
}
return n * RJieCheng(n - 1);
}
int main()
{
long long sum = 0;
int x = 0;
int j = 4;
printf("输入4个测试用例(输入的数值>3),每次输入一个\n");
while (j)
{
printf("请输入你要求的前n个数的阶乘的和:>");
scanf("%d", &x);
sum = 0;
for (int i = 1; i <= x; i++)
{
sum = sum + RJieCheng(i);
}
printf("前n个数的阶乘的和为:>%lld\n", sum);
j--;
}
return 0;
}
非递归实现:
不利用递归实现那么就是利用两for循环 来实现阶乘求和的结果
思想:
利用两个for循环实现,一个for循环实现求和,内嵌一个for循环进行每个数阶乘后的结果。
代码实现:
#include<stdio.h>
int main()
{
int n = 0;
int j = 1;
int i = 1;
long long add = 0;
printf("请输入你要求的前n个数的阶乘的和:>");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
long long sum = 1;
for (j = 1; j <= i; j++)
{
sum = j * sum;
}
add = sum + add;
}
printf("\n");
if (n == 0)
{
printf("1");
}
else
{
printf("1~%d数字阶乘的和为:%lld\n", n, add);
}
return 0;
}