高斯求和1+2+3+······+n-1+n=?
从求解1+2+3+······+n-1+n引出的一些思考。
- 1: int countSum(int n)
- 2: {
- 3: int i;
- 4: int sum;
- 5: if(n<0)
- 6: {
- 7: //error
- 8: }
- 9: for(i=1;i<=n;i++) //考虑边界问题非常关键
- 10: {
- 11: sum+=i;
- 12: }
- 13: return sum;
- 14: //O(n)
- 15: }
- 上面是经常用到的一种方式,使用循环来得到答案。时间复杂度取决于“n”的值O(n);上面的for循环中的条件判断非常关键。
- 1: int countSum(int n)
- 2: {
- 3: if(n<0)
- 4: {
- 5: //error
- 6: }
- 7: return n*(n+1)/2; //运用高斯公式同样可以简化问题得到结果
- 8: //O(1)
- 9: } 对于这样的问题可以使用已经确定的公式来计算。时间复杂度O(1)
- 1: int countSum(int n)
- 2: {
- 3: if(n<0){
- 4: //error
- 5: }
- 6: if(n==1){
- 7: return 1;
- 8: }else{
- 9: return n+sum(n-1);
- 10: }
- 11: }
又是一个递归的使用。
递归算法中可以看出:经过了两次判断,和n次方法的调用,对于100这么小的数据是看不出来时间方面的消耗,但是如果一旦数据非常大的时候这个算法的时间效率是很低的。
通过一个简单的计算问题,可以有不同的设计思路,也同样产生不同的时间复杂度,还有代码的编辑量。
编写代码的优劣就可以体现出来。对于程序设计而言,一个问题的解决至少得考虑下问题:
- 正确性,必须符合特地定问题的需要
- 可读性,算法便于理解
- 健壮性,当遇到非法输入的时候能够做出相应的处理,而不产生不可预料的结果
- 算法的时间高利用率
- 内存空间的高利用率
通常情况下,时间的利用率和空间的利用率总是矛盾的,我们的取舍要看这两种资源的丰富程度。计算机起初发展的时候,内存空间特别小,所以就特别注重空间的利用率,比如MCS 51单片机,它的内存空间一般就是64KB大小,所以对于它来说解决空间的问题才是主要矛盾;而对于现在的PC机内存大多数已经达到2G或以上,所以解决时间的问题才是主要矛盾。
当然时间是不可再生资源,所以现如今的程序设计对于时间效率有着很高的要求,对于Java程序设计,由于它本身的虚拟机机制,所以在效率方面同比C语言要低一些,因此更应在注重程序设计过程中的编码方式,算法设计,变量的定义,方法的调用等等,尽可能的提高运行效率。
高斯求和1+2+3+······+n-1+n=?相关推荐
- python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合
本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...
- 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 ...
- www.etiger.vip 1612题 高斯求和
1612.高斯求和 题目描述 约翰·卡尔·弗里德里希·高斯(Johann Carl Friedrich Gauss,1777年4月30日-1855年2月23日)德国著名数学家,并享有"数学王 ...
- 南邮 OJ 1176 高斯求和
高斯求和 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 3327 测试通过 : 568 ...
- 基于高斯求和计算方法设计阶乘算法
概述:我们知道高斯求和的算法是将前后两个数相加直到加到最内层,因此我们可以推出乘法的相关性,进而减少乘法的运算次数. 分析如下: 1! = 1 2! = 1 * 2 3! = 1 * 2 * 3 4! ...
- python:求高斯求和!
#首先了解一下什么是高斯求和? 就是算出1+2+3+--+100的值! #方法一(用函数实现) def func(n):sum = 0;for i in range(1,n+1)sum += iret ...
- 输出,求和,高斯求和
输出: print("yuanhongfei") 普通求和: a=int(input()) b=int(input()) print(a+b) 高斯求和: n=input() n1 ...
- 1+..+ 100 高斯求和
1+--100求和 int sum = 0; for(int i = 1 ; i <= 100 ;i++) {sum += i; } cout << sum; 高斯求和 sum1 = ...
- c语言1 n累加求和高斯法,N以内累加求和(高斯求和)
解法一:循环累加 将输入的数字N循环逐次减1,定义一个变量sum将每次减1的结果累加,输出sum就是所求结果#include using namespace std; int main() { int ...
- python高斯求和_二、算法分析
一.什么是算法分析 程序和算法的区别: 算法是对问题解决的分步描述 程序是采用某种编程语言实现的算法,同一个算法通过不同的程序员采用不同的编程语言,能产生很多程序 算法分析的概念: 算法分析主要就是从 ...
最新文章
- VC连接SQL server2005
- MongoDB学习(翻译7)
- POJ-2195(最小费用最大流)
- HashMap的遍历方法
- 分布式项目启动时报错:Duplicate spring bean id XXX
- java csrf_java使用jsp servlet来防止csrf 攻击的实现方法
- Spring BPP中优雅的创建动态代理Bean
- String及其常用API
- 审查元素找不到创建的元素_面试被问:Selenium元素定位不到问题,如何回答?...
- Android studio 报错Failed to open zip file解决方法
- python函数可以返回多个函数值吗_python - 函数返回多个值是pythonic吗?
- StringUtils.hasText()说明
- Linux无线投屏软件,scrcpy - 手机无线投屏到电脑
- linux怎么用中文显示,linux中文显示设置
- FileReader 对象实现图片预览
- 【算法学习笔记07】贪心算法(Greedy Algorithm)
- 计算机无纸化考试知识点,计算机二级VFP无纸化考试重点和难点
- 虚拟机关机/重启后都要重装虚拟机的操作系统
- 审稿意见回复信英文模板和语料总结
- 【收藏】最全计算机网络基础思维导图
热门文章
- 在线base64加密解密工具
- 【Java每日一题】20161019
- C#对象序列化与反序列化zz
- CodeForces 598A Tricky Sum
- fonts.googleapis.com不能访问时的解决方法
- 231 · 自动补全
- 132. 分割回文串 II
- python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...
- groupby java_Java8的groupBy实现集合的分组
- python3.8自带matlop和numpy吗_python3.8自带matlop和numpy吗_python之matloplib可视化