Java计算1+2+...+n

来源:互联网 发布:php源码防复制 编辑:程序博客网 时间:2024/06/12 21:54

前言

写这篇博客前,首先声明我只是个菜鸟,不是大牛,写的不好或者有错漏的地方希望各位不吝赐教!这些博客主要是java基础学习过程中的笔记!

正文

废话不多说,我们直接进入主题。当看到一个具体的N值的时候,比如100,1000,or其他的时候,我们很多计算机专业同学呢第一反应就是叠加啊,for循环累加,或者while循环累加。因为初学java语法基础的时候,老师留的练习题也是这样,所以以后遇到这样的题,条件反射当然是搬出这样的家底了(这也不奇怪,谁叫我们都是从题海战术中爬出来的)使用for循环代码如下:

                        

public int sum(int n){int sum=0;//需要返回的结果for(int i=1;i<=n;i++){sum+=i;}return sum;}
 使用while循环代码结构也是差不多的,代码如下

public int sum2(int n){int sum =0;int i=1;while(i<=n){sum+=i;i++;}return sum;}
上面的代码都是正确的,结果也是正确的。当n很小的时候性能上没有什么影响,但是当n比较大且在庞大复杂的系统里时,它也许会成为性能瓶颈。回到问题本身时,你拿这个题目给数学系的同学看,他会鄙视你,说这不是高中的数学知识点吗?仔细观察这是数字的特点相差都为1,直接套用等差数列公式不就行了吗?等差数列公式长什么样,其实我也不能马上背出来,但是我可以自己推导出来啊(ps:虽然不能背出来,但是经过高中的洗刷,还是有印象的)or百度啊。它的样子呢就是这样:

等差数列求和公式
  • formula
公式描述:
公式中首项为a1,末项为an,项数为n,公差为d,前n项和为Sn。
因此我们的求和函数代码如下:
/** * @param a1 首项 * @param n 项数 * @param d 公差 * @return */public double sum3(int a1,int n,double d){double sum=0;sum = n*a1+n*(n-1)*d/2;return sum;}
求和效率是不是瞬间提高了。因此在系统开发的时候,除了得到正确的结果外还要不断提高代码的效率,这样才能不断提高自己,而不是代码搬运工。




1 0
原创粉丝点击