请上传符合时间复杂度要求的,实验题第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的平方了),还有就是递归层数,还是比较好判断的,其次还要注意,他的循环次数