从求解1+2+3+······+n-1+n引出的一些思考。

  1. 1: int countSum(int n)
  2. 2: {
  3. 3: int i;
  4. 4: int sum;
  5. 5: if(n<0)
  6. 6: {
  7. 7: //error
  8. 8: }
  9. 9: for(i=1;i<=n;i++) //考虑边界问题非常关键
  10. 10: {
  11. 11: sum+=i;
  12. 12: }
  13. 13: return sum;
  14. 14: //O(n)
  15. 15: }
  16. 上面是经常用到的一种方式,使用循环来得到答案。时间复杂度取决于“n”的值O(n);上面的for循环中的条件判断非常关键。
  17. 1: int countSum(int n)
  18. 2: {
  19. 3: if(n<0)
  20. 4: {
  21. 5: //error
  22. 6: }
  23. 7: return n*(n+1)/2; //运用高斯公式同样可以简化问题得到结果
  24. 8: //O(1)
  25. 9: } 对于这样的问题可以使用已经确定的公式来计算。时间复杂度O(1)
  26. 1: int countSum(int n)
  27. 2: {
  28. 3: if(n<0){
  29. 4: //error
  30. 5: }
  31. 6: if(n==1){
  32. 7: return 1;
  33. 8: }else{
  34. 9: return n+sum(n-1);
  35. 10: }
  36. 11: }

又是一个递归的使用。

递归算法中可以看出:经过了两次判断,和n次方法的调用,对于100这么小的数据是看不出来时间方面的消耗,但是如果一旦数据非常大的时候这个算法的时间效率是很低的。

通过一个简单的计算问题,可以有不同的设计思路,也同样产生不同的时间复杂度,还有代码的编辑量。

编写代码的优劣就可以体现出来。对于程序设计而言,一个问题的解决至少得考虑下问题:

  1. 正确性,必须符合特地定问题的需要
  2. 可读性,算法便于理解
  3. 健壮性,当遇到非法输入的时候能够做出相应的处理,而不产生不可预料的结果
  4. 算法的时间高利用率
  5. 内存空间的高利用率

通常情况下,时间的利用率和空间的利用率总是矛盾的,我们的取舍要看这两种资源的丰富程度。计算机起初发展的时候,内存空间特别小,所以就特别注重空间的利用率,比如MCS 51单片机,它的内存空间一般就是64KB大小,所以对于它来说解决空间的问题才是主要矛盾;而对于现在的PC机内存大多数已经达到2G或以上,所以解决时间的问题才是主要矛盾。

当然时间是不可再生资源,所以现如今的程序设计对于时间效率有着很高的要求,对于Java程序设计,由于它本身的虚拟机机制,所以在效率方面同比C语言要低一些,因此更应在注重程序设计过程中的编码方式,算法设计,变量的定义,方法的调用等等,尽可能的提高运行效率。

高斯求和1+2+3+······+n-1+n=?相关推荐

  1. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

  2. Python 1~500 求和(循环遍历求和,高斯求和,定义函数求和)

    Day 2:求和 一. 循环遍历求和 for循环/while循环 #1.for 循环 s=0 for i in range(1,501):s=s+i print(s) #2.while 循环 a=1 ...

  3. www.etiger.vip 1612题 高斯求和

    1612.高斯求和 题目描述 约翰·卡尔·弗里德里希·高斯(Johann Carl Friedrich Gauss,1777年4月30日-1855年2月23日)德国著名数学家,并享有"数学王 ...

  4. 南邮 OJ 1176 高斯求和

    高斯求和 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 3327            测试通过 : 568 ...

  5. 基于高斯求和计算方法设计阶乘算法

    概述:我们知道高斯求和的算法是将前后两个数相加直到加到最内层,因此我们可以推出乘法的相关性,进而减少乘法的运算次数. 分析如下: 1! = 1 2! = 1 * 2 3! = 1 * 2 * 3 4! ...

  6. python:求高斯求和!

    #首先了解一下什么是高斯求和? 就是算出1+2+3+--+100的值! #方法一(用函数实现) def func(n):sum = 0;for i in range(1,n+1)sum += iret ...

  7. 输出,求和,高斯求和

    输出: print("yuanhongfei") 普通求和: a=int(input()) b=int(input()) print(a+b) 高斯求和: n=input() n1 ...

  8. 1+..+ 100 高斯求和

    1+--100求和 int sum = 0; for(int i = 1 ; i <= 100 ;i++) {sum += i; } cout << sum; 高斯求和 sum1 = ...

  9. c语言1 n累加求和高斯法,N以内累加求和(高斯求和)

    解法一:循环累加 将输入的数字N循环逐次减1,定义一个变量sum将每次减1的结果累加,输出sum就是所求结果#include using namespace std; int main() { int ...

  10. python高斯求和_二、算法分析

    一.什么是算法分析 程序和算法的区别: 算法是对问题解决的分步描述 程序是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序 算法分析的概念: 算法分析主要就是从 ...

最新文章

  1. VC连接SQL server2005
  2. MongoDB学习(翻译7)
  3. POJ-2195(最小费用最大流)
  4. HashMap的遍历方法
  5. 分布式项目启动时报错:Duplicate spring bean id XXX
  6. java csrf_java使用jsp servlet来防止csrf 攻击的实现方法
  7. Spring BPP中优雅的创建动态代理Bean
  8. String及其常用API
  9. 审查元素找不到创建的元素_面试被问:Selenium元素定位不到问题,如何回答?...
  10. Android studio 报错Failed to open zip file解决方法
  11. python函数可以返回多个函数值吗_python - 函数返回多个值是pythonic吗?
  12. StringUtils.hasText()说明
  13. Linux无线投屏软件,scrcpy - 手机无线投屏到电脑
  14. linux怎么用中文显示,linux中文显示设置
  15. FileReader 对象实现图片预览
  16. 【算法学习笔记07】贪心算法(Greedy Algorithm)
  17. 计算机无纸化考试知识点,计算机二级VFP无纸化考试重点和难点
  18. 虚拟机关机/重启后都要重装虚拟机的操作系统
  19. 审稿意见回复信英文模板和语料总结
  20. 【收藏】最全计算机网络基础思维导图

热门文章

  1. 在线base64加密解密工具
  2. 【Java每日一题】20161019
  3. C#对象序列化与反序列化zz
  4. CodeForces 598A Tricky Sum
  5. fonts.googleapis.com不能访问时的解决方法
  6. 231 · 自动补全
  7. 132. 分割回文串 II
  8. python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...
  9. groupby java_Java8的groupBy实现集合的分组
  10. python3.8自带matlop和numpy吗_python3.8自带matlop和numpy吗_python之matloplib可视化