求连续整数的阶层的和,时间复杂程度为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~

相关文章
|
1月前
|
算法 测试技术
【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字
【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字
|
8月前
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
51 0
|
24天前
【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)
【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)
|
1月前
|
算法 测试技术 C++
【位运算】3097. 或值至少为 K 的最短子数组
【位运算】3097. 或值至少为 K 的最短子数组
【位运算】3097. 或值至少为 K 的最短子数组
|
1月前
每日一题(最大连续1的个数,完全数计算)
每日一题(最大连续1的个数,完全数计算)
15 0
|
1月前
|
人工智能 算法
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)
|
1月前
leetcode-1438:绝对差不超过限制的最长连续子数组
leetcode-1438:绝对差不超过限制的最长连续子数组
26 0
|
8月前
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
376 1
|
10月前
|
算法
Leetcode 862. 和至少为 K 的最短子数组
给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k 的 最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1 。
65 0
Leecode 面试题57 - II. 和为s的连续正数序列
Leecode 面试题57 - II. 和为s的连续正数序列
38 0

热门文章

最新文章