求连续整数的阶层的和,时间复杂程度为O(n)的解法

简介: 求连续整数的阶层的和,时间复杂程度为O(n)的解法

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

bye~

相关文章
|
6月前
|
算法 测试技术
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
枚举(蓝桥练习)(反倍数、特别数的和、找到最多的数、小蓝的漆房、小蓝和小桥的挑战)
|
6月前
|
算法 测试技术
【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字
【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
71 0
|
6月前
|
存储
Leetcode2336 无限集中的最小数字
Leetcode2336 无限集中的最小数字
|
6月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
6月前
每日一题(最大连续1的个数,完全数计算)
每日一题(最大连续1的个数,完全数计算)
32 0
|
6月前
|
算法 Java
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
70 0
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
|
6月前
|
存储
leetcode-6113:无限集中的最小数字
leetcode-6113:无限集中的最小数字
42 0
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
407 1
旋转数组的最小数字(简单难度)
旋转数组的最小数字(简单难度)
74 0
旋转数组的最小数字(简单难度)