请上传符合时间复杂度要求的,实验题第4题的算法。
一层for循环
#include <stdio.h>
int main()
{
int n,sum=0,temp=1;
printf("请输入一个n,该程序会帮你计算 1!+2!+3!+4!+5!+...+n!:\n");
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
temp=temp*i;
sum=sum+temp;
}
printf("结果是:%d",sum);
return 0;
}
后面的想用递归来写一写,结果发现,如果只有一层的,就要设很多的未知数,所以就写了一个两层的
#include <stdio.h>
int fact(int n);
int factsum(int n);
int main()
{
int n;
printf("请输入一个n,该程序会帮你计算 1!+2!+3!+4!+5!+...+n!:\n");
scanf("%d",&n);
printf("结果是:%d",factsum(n));
return 0;
}
int fact(int n)
{
int result;
if (n == 1 || n == 0)
{
result = 1;
}
else
{
result = n * fact(n - 1);
}
return result;
}
int factsum(int n)
{
int sum;
if (n == 1)
{
sum = 1;
}
else if (n == 0)
{
sum = 0;
}
else
{
sum = fact(n) + factsum(n - 1);
}
return sum;
}
然后像这个复杂程度的话,我一般都是直接看for循环的次数,有无嵌套(有的话,那就是n的平方了),还有就是递归层数,还是比较好判断的,其次还要注意,他的循环次数