
圖片.png

圖片.png
到底是我的a,b和他的m,n不對應(yīng)還是我沒有進(jìn)行非法判斷呢?后來我想了下都不是,這題應(yīng)該考的效率,于是:
import org.junit.Test;
import java.util.Date;
public class TestSum {
//普通for循環(huán)累和
public int sum1(int m, int n){
int sum=0;
for (int i = m; i <= n; i++) {
sum += i;
}
return sum;
}
//高斯算法累和
public int sum2(int m, int n){
return (m+n)*(n-m+1)/2;
}
//遞歸累和
public int sum3(int m, int n) {
if (m > n) return 0;
if (m == n) return m;
return m + n + sum3(m + 1, n - 1);
}
@Test
public void test1(){
//普通循環(huán)效率最低
Date start = new Date();
int sum = sum1(0, 100000000);
Date end = new Date();
System.out.println("普通for循環(huán)結(jié)果"+sum);
System.out.println("普通for循環(huán)耗時"+(end.getTime()-start.getTime()));
System.out.println("==================================");
//高斯運(yùn)算最優(yōu)
start = new Date();
sum = sum2(0, 100000000);
end = new Date();
System.out.println("高斯運(yùn)算結(jié)果"+sum);
System.out.println("高斯運(yùn)算耗時"+(end.getTime()-start.getTime()));
System.out.println("==================================");
//遞歸運(yùn)算效率不錯,但在數(shù)字過大時后會內(nèi)存溢出
/*start = new Date();
sum = sum3(0, 90000);
end = new Date();
System.out.println("遞歸運(yùn)算結(jié)果"+sum);
System.out.println("遞歸運(yùn)算耗時"+(end.getTime()-start.getTime()));*/
}
}

圖片.png
算法理解:

圖片.png