这里的demo是一个累加算法,如1,2,3,4.....n
即:sum = 1+2+3+4......+n;
我们可以这样做:
1 /** 2 * 循环实现累加方法 3 * @param value 4 * @return 5 */ 6 private static long cycle(long value) { 7 long sum = 0; 8 9 for (long i = 1,v = value; i <= v; i++) { 10 sum += i; 11 } 12 return sum; 13 }
另一种方法(高斯方法):
1 /** 2 * 高斯方法:<code>(n+1)*n/2</code><br> 3 * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a> 4 * @param value 5 * @return 6 */ 7 private static long gaosi(long value) { 8 long sum = 0; 9 sum = (value + 1) * value / 2; 10 return sum; 11 }
我们可以写一个demo来测试他们的差别:
1 /** 2 * 3 */ 4 package com.b510.arithmetic; 5 6 /** 7 * 累加算法实现<br> 8 * 9 * @date 2013-4-16 10 * @author hongten 11 * 12 */ 13 public class AddArithmetic { 14 15 /** 16 * 循环实现累加方法 17 * @param value 18 * @return 19 */ 20 private static long cycle(long value) { 21 long sum = 0; 22 23 for (long i = 1,v = value; i <= v; i++) { 24 sum += i; 25 } 26 return sum; 27 } 28 29 /** 30 * 高斯方法:<code>(n+1)*n/2</code><br> 31 * you can read more from <a href="http://zhidao.baidu.com/question/411055258.html">Here</a> 32 * @param value 33 * @return 34 */ 35 private static long gaosi(long value) { 36 long sum = 0; 37 sum = (value + 1) * value / 2; 38 return sum; 39 } 40 41 public static void main(String[] args) { 42 //清理一下内存,但不一定会执行 43 System.gc(); 44 // you should change value,then get the different results 45 long value = 10000000; 46 long sum = 0; 47 long start = System.currentTimeMillis(); 48 sum = cycle(value); 49 long end = System.currentTimeMillis(); 50 System.out.println("使用循环累加方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum); 51 //清理一下内存,但不一定会执行 52 System.gc(); 53 start = System.currentTimeMillis(); 54 sum = gaosi(value); 55 end = System.currentTimeMillis(); 56 System.out.println("使用高斯方法从[1]累加到["+value+"]用时 : ["+(end - start) + "]ms,结果:"+ sum); 57 58 } 59 60 }
你可以改变main方法中的value的值,来测试他们所消耗的系统时间....
当然不同配置的机器运行结果是不一样的...
我机器运行情况:
使用循环累加方法从[1]累加到[10000000]用时 : [24]ms,结果:50000005000000
使用高斯方法从[1]累加到[10000000]用时 : [0]ms,结果:50000005000000