求1!+ 2!+ …… + n!
第一种,使用循环
#include<stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int ret = 1;
int sum = 0;
int n = 6;
for (i = 1; i <= n; i++)
{
ret = ret*i;
sum = sum + ret;
}
printf("%d\n", sum);
system("pause");
return 0;
}
第二种,使用递归
思想:创建一个求n!的函数,再创建一个求1!+ 2!+ ...... + n!的函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
int fac1(int n)//此函数求n!
{
if (n <= 1)
return 1;
else
return n*fac1(n - 1);
}
int fac2(int n)//此函数求1!+ 2!+ ...... + n!
{
if (n <= 1)
return 1;
else
return fac2(n-1) + fac1(n);
}
int main()
{
int n = 0;
printf("n:");
scanf("%d", &n);
printf("%d\n",fac2(n));
system("pause");
return 0;
}
求n!
第一种,使用循环
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int k = 1;
int n = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
k *= i;
}
printf("%d\n", k);
system("pause");
return 0;
}
第二种,使用递归(此方法参数大一点的话,会发生栈溢出(stack overflow))
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
int factorial(int n)
{
if (n <= 1)
return 1;
else
return n*factorial(n - 1);
}
int main()
{
int n = 0;
printf("n:");
scanf("%d", &n);
printf("%d\n", factorial(n));
system("pause");
return 0;
}